头文件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;
}

  

c语言创建线程的函数封装的更多相关文章

  1. js cookie创建读取删除函数封装

    js cookie创建读取删除函数封装 一.总结 都是为了方便操作,这样弄了很方便 1.创建cookie的函数封装的作用:方便设置过期时间expire,方便设置键和值 2.查询cookie的数据封装的 ...

  2. C语言创建线程以及使用锁进行读写分离

    线程的使用 1.线程的创建 线程的相关操作放在<pthread.h>中. 1.1我们定义一个线程,首先要进行定义一个函数,类似我们创建一个a线程 void *thread_a(void * ...

  3. windows多线程(十一) 更安全的创建线程方式_beginthreadex()

    一.原因分析 CreateThread()函数是Windows提供的API接口,在C/C++语言另有一个创建线程的函数_beginthreadex(),我们应该尽量使用_beginthreadex() ...

  4. 01创建线程CreateThread和_beginthreadex

    Windows多线程之线程创建 一. 线程创建函数 CreateThread 1. 函数原型 HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRI ...

  5. C语言实现线程池功能

    1. 线程池基本原理 2. 线程池C语言实现 2.1 线程池的数据结构 #include <stdio.h> #include <pthread.h> #include < ...

  6. pthread创建线程的简单演示

      使用pthread创建子线程的简单步骤 导入头文件 #import <pthread.h> 指定新线程标识符 使用pthread创建线程的函数 根据result = 0 与否判断子线程 ...

  7. clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)

    进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...

  8. [笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...

  9. 驱动开发之 创建线程函数PsCreateSystemThread

    PsCreateSystemThread 创建一个执行在内核模式的系统线程. 注意:创建线程必须用函数PsTerminateSystemThread强制线程结束.否则该线程是无法自动退出的. 函数原型 ...

  10. Thread 创建线程

    1.该线程变量 无参数 我们可以把线程的变量 理解为一个 委托.可以指向一个方法.有点像c语言中的指向函数的指针. 第1步我们创建了 Thread变量t1 ,第2步创建了一个方法threadChild ...

随机推荐

  1. 滴水2.c++构造 与 继承

    1.构造函数特点 2.析构函数的特点: 析构函数前面必须有~ 3.继承 一个子类可以有多个父类 作业1. #include<stdio.h> struct DateInfo { int y ...

  2. Hyperledger Fabric部署与测试(Ubuntu)

    Fabric部署与测试 Fabric部署与测试最正确的还是参照官方链接:Hyperledger Fabric官方链接 ok,接下来开始部署Fabric.(以Ubuntu为例) 一.部署Fabric 1 ...

  3. CentOS7加入AD域(winbind)

    作者:独笔孤行 官网:​​ ​http://anyamaze.com​​ 公众号:云实战 前言 AD域(Active Directory)是Windows服务器的活动目录,在目录中可以收录公司的电脑账 ...

  4. 题解 [ZJOI2010]排列计数

    好题. % 你赛考到了不会摆烂,后来发现原来有向下取整,题面没有...( 就算有我也做不出来啦 qAq 首先我们会发现这个长得就是小根堆,答案就变成了小根堆的计数. 首先最小的数字肯定放在根的位置.我 ...

  5. 题解 P4317 花神的数论题

    并不难,但是因为各种 SB 原因调了 1145141919810min(悲 我们会发现 \(\operatorname{sum}\) 其实很小,顶多就 \(50\),这启发我们统计每个 \(\oper ...

  6. 基于C++的OpenGL 11 之投光物

    1. 引言 本文基于C++语言,描述OpenGL的投光物 前置知识可参考: 基于C++的OpenGL 10 之光照贴图 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多 ...

  7. 记一次hooks陷阱

    今天写一个hook,正想发挥hooks这种高级复用方式来缩短我的开发时间,就出现了一个新bug. 我编写的这个hook用于管理数据列表状态.除了导出内部的状态外,还导出一些方法供外部调用.代码简化如下 ...

  8. offer_48

    题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 思路: /* 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2. 第二步:计 ...

  9. vue打印图片

    element 中图片打印 [vue element 如何打印弹窗里的内容 无效](https://segmentfault.com/q/1010000015097252) vue element 如 ...

  10. K8S资源控制器

    什么是控制器 kubernetes中建立了很多的controller(控制器),这相当于一个控制机,来管理pod的状态和行为. 控制器的类型 ReplicationController和Replica ...