📄 mythread_linux.c
字号:
/*
*
*mythread_win32.c 封装线程接口 lin shao chuan
*
*/
#include "mythread.h"
#include <assert.h>
#include <pthread.h>
#include "mylog.h"
typedef struct __mythread_t_
{
//本对象内存池标识
HMYMEMPOOL hm;
//起始地址与用户参数
MY_THREAD_FUN fun;
void * userdata;
//线程id与句柄
pthread_t thr;
int run;
}mythread_t;
static void * threadfun(void * data)
{
mythread_t * mt = (mythread_t *)data;
assert(mt && mt->fun);
LOG_INFO(("new thread %d", pthread_self()));
mt->fun(mt->userdata);
return NULL;
}
/*
*
*创建线程
*
*/
HMYTHREAD MyThreadConstruct(MY_THREAD_FUN fun, void * data, int bsuspend, HMYMEMPOOL hm)
{
int ret = 0;
mythread_t * mt = (mythread_t *)MyMemPoolMalloc(hm, sizeof(*mt));
if(NULL == mt)
return NULL;
assert(fun);
mt->fun = fun;
mt->userdata = data;
mt->hm = hm;
mt->run = 0;
mt->thr = 0;
//是否挂起创建
if(bsuspend)
return (HMYTHREAD)mt;
mt->run = 1;
pthread_create(&mt->thr, NULL, threadfun, mt);
return (HMYTHREAD)mt;
}
/*
*
*销毁线程
*
*/
void MyThreadDestruct(HMYTHREAD ht)
{
mythread_t * mt = (mythread_t *)ht;
if(NULL == mt)
return;
if(mt->thr)
pthread_cancel(mt->thr);
MyMemPoolFree(mt->hm, mt);
}
/*
*
*运行线程
*
*/
void MyThreadRun(HMYTHREAD ht)
{
mythread_t * mt = (mythread_t *)ht;
if(NULL == mt)
return;
if(mt->run)
return;
pthread_create(&mt->thr, NULL, threadfun, mt);
}
/*
*
*停止线程运行
*
*/
void MyThreadSuspend(HMYTHREAD ht)
{}
/*
*
*等待线程退出
*
*/
void MyThreadJoin(HMYTHREAD ht)
{
mythread_t * mt = (mythread_t *)ht;
if(NULL == mt)
return;
pthread_join(mt->thr, NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -