日期:2014-05-16  浏览次数:20697 次

在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");




这是创建三线程吗,、?

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