当前位置: 技术问答>linux和unix
在Linux中如何实现多个函数同时运行?
来源: 互联网 发布时间:2017-03-16
本文导语: 小弟在学习嵌入式开发,最近在做多线程,有三个函数mifare(),gprs(),gps(),分别实现打卡,发送数据,接受gps数据的功能! 我创建了三个线程,属性设置为分离,每个函数末尾都用sleep(10)结尾!可是我下...
小弟在学习嵌入式开发,最近在做多线程,有三个函数mifare(),gprs(),gps(),分别实现打卡,发送数据,接受gps数据的功能!
我创建了三个线程,属性设置为分离,每个函数末尾都用sleep(10)结尾!可是我下载到开发板上运行,程序跑很快,感觉sleep(10)没用,没有多久整个程序就死掉了!要不就是打开文件失败,要不就是获取地理位置失败!
还请高手赐教,给小弟一些提示!在此感激不尽!
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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(10)结尾!可是我下载到开发板上运行,程序跑很快,感觉sleep(10)没用,没有多久整个程序就死掉了!要不就是打开文件失败,要不就是获取地理位置失败!
还请高手赐教,给小弟一些提示!在此感激不尽!
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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;
}
|
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");
}
}
这是创建三线程吗,、?
这个一直在创建线程,直到资源耗尽,然后死掉
{
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");
}
}
这是创建三线程吗,、?
这个一直在创建线程,直到资源耗尽,然后死掉
|
三个线程需要同步吗? 同步不要用sleep,,用mutex+cond。
|
三个分别作任务,不需要sleep吧!