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

  

posted on 2022-08-12 10:27  Ants_hu  阅读(96)  评论(0编辑  收藏  举报

导航