c语言创建线程的函数封装
头文件xxx.h
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
typedef int (*task_fun_t)(void *arg);
typedef struct _task_t
{
unsigned int ms;
task_fun_t fun;
unsigned char arg[1024];
}task_t;
int CreatTaskThread(task_fun_t fun, void *arg, int arglen, int nDelayMs);
c文件xxx.c
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include "xxx.h"
void *taskThreadFun(void *arg)
{
if(NULL == arg)
{
return arg;
}
task_t *pTaskInfo = (task_t *)arg;
task_fun_t fun = pTaskInfo->fun;
if(pTaskInfo->ms)
{
usleep(pTaskInfo->ms * 1000);
}
pTaskInfo->fun(pTaskInfo->arg);
free(pTaskInfo);
pTaskInfo = NULL;
return arg;
}
int CreatTaskThread(task_fun_t fun, void *arg, int arglen, int nDelayMs)
{
task_t *pTask = (task_t *)malloc(sizeof(task_t));
if(NULL == pTask)
{
printf("malloc error!\n");
return -1;
}
memset(pTask, 0, sizeof(task_t));
pTask->ms = nDelayMs;
pTask->fun = fun;
if(NULL != arg && arglen > 0){
memcpy(pTask->arg,arg,arglen);
}
printf("arglen = [%d]\n",arglen);
static pthread_t taskThread;
if(pthread_create(&taskThread, NULL, taskThreadFun, pTask) != 0)
{
printf("pthread_create error.[%s]\n",strerror(errno));
return -1;
}
printf("\n");
if(pthread_detach(taskThread))
{
printf("pthread_detach error.[%s]\n",strerror(errno));
return -1;
}
return 0;
}
main.c
#include "xxx.h"
int demoFunc(void *argv)
{
int index = *(int *)argv;
return 0;
}
int main()
{
CreatTaskThread(demoFunc,&index,sizeof(int),0);
return 0;
}
浙公网安备 33010602011771号