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; }