头文件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. playwright 实现高亮、is_visible 等源码修改

    一. 前言 高亮是什么? 在ui自动化中可以执行js来让某个页面元素高亮,比如背景颜色.字体颜色.边框颜色等发生改变,以此更加方便执行的时候点了哪一步操作.(如果有不清楚怎么实现的可以转到我的介绍se ...

  2. vim编辑器操作指南

    编辑模式(i) yy复制行 p粘贴 dd剪切 V按行选中 u撤销 ctr+r反撤销 >>往右缩进 <<往左缩进 :/...搜索指定内容 .重复上一次命令 G回到最后一行 gg回 ...

  3. Vulhub 漏洞学习之:Discuz

    Vulhub 漏洞学习之:Discuz 目录 Vulhub 漏洞学习之:Discuz 1 Discuz 7.x/6.x 全局变量防御绕过导致代码执行 1.1 漏洞利用过程 2 Discuz!X ≤3. ...

  4. Corundum:100G NIC学习(二)——仿真

    前情提要:搭建corundum仿真环境(一)https://www.cnblogs.com/shroud404/articles/15364812.html 三.Running test 接上文,梳理 ...

  5. 关于fetch请求中非表单模式(form)转化为form格式请求成功问题

    首先证实一下接口请求可以成功,postman掉通 2.证实接口可以掉通之后,来发现问题 发现根本不是form表单格式3.去操作实现form表单格式 发现form格式貌似已经转换,但是请求还是不对 最后 ...

  6. 【python操作Excel的常见方法汇总】 xlrd pandas xlwings

    用python处理Excel数据,实现Excel的功能:分列.透视等功能 1. Excel 解压文件 #解压tar_path中的压缩文件到uzipPath def unzip_archive(tar_ ...

  7. codeforce A. Many Equal Substrings

    http://codeforces.com/contest/1029/problem/A 嗳,简单的题做起来是真的舒服qwq 1 public static void main(String[] ar ...

  8. ifconfig查询的时候,只有lo网卡,没有ens33网卡

    问题ifconfig查询的时候,只有lo网卡,但是ifconfig -a查询的时候却有ens33网卡ls /etc/syconfig/network-scripts/查找所有网卡配置信息文件的时候,没 ...

  9. redis 单节点迁移到集群 redis-shake

    1.迁移 1.1.同步到单节点 redis-shake下载  release-v2.1.2-20220329.tar.gz #redis cluster 某一个节点   服务器安装redis-shak ...

  10. vscode代码片段

    {    "Print to console": {        "prefix": "vue2",        "body& ...