⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mythread_linux.c

📁 提供了rbtree ttree avltree list hashtable等常用容器的算法,代码经过uclinux + arm44b0平台验证
💻 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 + -