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;
}
c语言创建线程的函数封装的更多相关文章
- js cookie创建读取删除函数封装
js cookie创建读取删除函数封装 一.总结 都是为了方便操作,这样弄了很方便 1.创建cookie的函数封装的作用:方便设置过期时间expire,方便设置键和值 2.查询cookie的数据封装的 ...
- C语言创建线程以及使用锁进行读写分离
线程的使用 1.线程的创建 线程的相关操作放在<pthread.h>中. 1.1我们定义一个线程,首先要进行定义一个函数,类似我们创建一个a线程 void *thread_a(void * ...
- windows多线程(十一) 更安全的创建线程方式_beginthreadex()
一.原因分析 CreateThread()函数是Windows提供的API接口,在C/C++语言另有一个创建线程的函数_beginthreadex(),我们应该尽量使用_beginthreadex() ...
- 01创建线程CreateThread和_beginthreadex
Windows多线程之线程创建 一. 线程创建函数 CreateThread 1. 函数原型 HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRI ...
- C语言实现线程池功能
1. 线程池基本原理 2. 线程池C语言实现 2.1 线程池的数据结构 #include <stdio.h> #include <pthread.h> #include < ...
- pthread创建线程的简单演示
使用pthread创建子线程的简单步骤 导入头文件 #import <pthread.h> 指定新线程标识符 使用pthread创建线程的函数 根据result = 0 与否判断子线程 ...
- clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- [笔记]linux下和windows下的 创建线程函数
linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...
- 驱动开发之 创建线程函数PsCreateSystemThread
PsCreateSystemThread 创建一个执行在内核模式的系统线程. 注意:创建线程必须用函数PsTerminateSystemThread强制线程结束.否则该线程是无法自动退出的. 函数原型 ...
- Thread 创建线程
1.该线程变量 无参数 我们可以把线程的变量 理解为一个 委托.可以指向一个方法.有点像c语言中的指向函数的指针. 第1步我们创建了 Thread变量t1 ,第2步创建了一个方法threadChild ...
随机推荐
- kali挂代理之——proxychains4
记一次打站需要用到kali,但是得挂代理,就从别人那里知道了一个kali挂代理的工具proxychains4. 首先是打开kali输入:root@Kali:~# vi /etc/proxychains ...
- 题解 [ZJOI2010]排列计数
好题. % 你赛考到了不会摆烂,后来发现原来有向下取整,题面没有...( 就算有我也做不出来啦 qAq 首先我们会发现这个长得就是小根堆,答案就变成了小根堆的计数. 首先最小的数字肯定放在根的位置.我 ...
- php中 mysql 中文乱码解决办法
首先要保证是utf-8编码或者支持中文的编码 2.Windows下修改方法 MySQL安装目录下的my-default.ini改为my.ini文件 [client]节点 default-charac ...
- Json.stringfiy json未定义
在文档的顶部添加 <!DOCTYPE html> 没有它,IE10是一个奇怪的兼容模式,许多"新"功能不可用,例如JSON.如果你任然需要使用早期版本的IE,你可以使用 ...
- 03#Web 实战:实现下拉菜单
实现过程 实现一个简易的鼠标悬停菜单项显示其子项的下拉框控件.将用到 CSS 绝对定位.流式布局.动画等:JQuery 鼠标移入和移出事件.DOM 查找.效果图如下: HTML 结构: <div ...
- java-tocsv
1.依赖 <dependencies> <dependency> <groupId>org.apache.poi</groupId> <artif ...
- shell 命令小记
if [ -d /abc ] if与后面括号要有空格 中括号与内部的变量也要有空格 for header in `ls *.h` do cp $header /usr/include/mymuduo ...
- 01-搭建小巧完善的Kubernetes环境
安装Docker Docker安装和基础命令 安装Minikube minkkube start 安装minikube curl -LO https://storage.googleapis.com/ ...
- MyBatis-Plus通用Iservice 方法详解
public interface IService<T> { /** * 默认批次提交数量 */ int DEFAULT_BATCH_SIZE = 1000; /** * 插入一条记录(选 ...
- 在使用IDEA提交git代码时,如何修改提交者的名字
在Terminal终端中输入 git config user.name git config --global user.name "xl"