创建一个进程:
int threadfg = -1;
void start_anim()
{
char a[4]="1234";
if (threadfg == (pthread_t)-1) {//强制转换,不要立即错了
if (pthread_create(&threadfg, NULL, myThreadFun, (void*)a)) {//创建线程,函数为myThreadFun,线程描述符threadfg,参数a。操作成功返回0,失败为其他
threadfg = -1;
printf("Create animation_thread ERROR!!\n");
};
}
}
void myThreadFun(int k)
{
//while(1){}
printf("%d\n",k);
}
void stop_anim()
{
if(threadfg != (pthread_t)-1) {
pthread_cancel(threadfg);//发终止信号
pthread_join(threadfg, NULL);//等待线程结束回收空间,关闭线程。正常退出应该是:将线程的while(x)的x改为false,然后pthread_join等待。如果线程出现阻塞这种方法就不好使了。
//pthread_cancel(threadfg);//=pthread_cancel+pthread_join
threadfg = -1;
}
//do some clean oporation
}
线程是否还活着:int pthread_kill(pthread_t thread, int sig)
返回值:
线程仍然活着:0
线程已不存在:ESRCH
信号不合法:EINVAL
线程锁:
pthread_mutex_t my_mutex; // 定义
初始化:
pthread_mutex_init(&my_mutex, NULL);
使用:
pthread_mutex_lock(&my_mutex);
...//作动作,注意:最好不要用其他锁。
pthread_mutex_unlock(&my_mutex);