读书人

在Linux中怎么实现多个函数同时运行

发布时间: 2012-10-17 10:25:46 作者: rapoo

在Linux中如何实现多个函数同时运行?
小弟在学习嵌入式开发,最近在做多线程,有三个函数mifare(),gprs(),gps(),分别实现打卡,发送数据,接受gps数据的功能!
我创建了三个线程,属性设置为分离,每个函数末尾都用sleep(10)结尾!可是我下载到开发板上运行,程序跑很快,感觉sleep(10)没用,没有多久整个程序就死掉了!要不就是打开文件失败,要不就是获取地理位置失败!
还请高手赐教,给小弟一些提示!在此感激不尽!
#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

#include <unistd.h>

#include <string.h>

#include <sys/ioctl.h>

#include <sys/mman.h>

#include <asm/page.h>

#include <linux/fb.h>

#include <signal.h>
#include <pthread.h>



#include "main.h"

#include "../app/fbtools.h"

#include "../driver/gprs/gprs.h"

#include "../driver/mifare/mifare.h"

#include "../driver/gps/gps.h"


pthread_t id;
pthread_t id2;
pthread_t id3;
pthread_attr_t attr;


int main(int argc, char * argv[])

{
int ret,exit;

system("pppd call gprs &");

sleep(3);
InitDisplay();
exit = 1;
while(exit==1)

{
pthread_attr_init(&attr);
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);

ret =pthread_create(&id,&attr,(void *)mifare_test,NULL);
if(ret!=0)
{
printf("Create pthread error.\n");
}


ret=pthread_create(&id2,&attr,(void *)gps_test,NULL);
if(ret!=0)
{
printf("Create pthread error.\n");
}

ret=pthread_create(&id3,&attr,(void *)gprs_test,NULL);
if(ret!=0)
{
printf("Create pthread error.\n");
}

}

CloseDisplay();

return 0;

}


[解决办法]
三个线程需要同步吗? 同步不要用sleep,,用mutex+cond。
[解决办法]
三个分别作任务,不需要sleep吧!
[解决办法]
while(exit==1)

{
pthread_attr_init(&attr);
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);

ret =pthread_create(&id,&attr,(void *)mifare_test,NULL);
if(ret!=0)
{
printf("Create pthread error.\n");
}


ret=pthread_create(&id2,&attr,(void *)gps_test,NULL);
if(ret!=0)
{
printf("Create pthread error.\n");
}

ret=pthread_create(&id3,&attr,(void *)gprs_test,NULL);
if(ret!=0)
{
printf("Create pthread error.\n");
}

}

这是创建三线程吗,、?

这个一直在创建线程,直到资源耗尽,然后死掉

读书人网 >UNIXLINUX

热点推荐