/*********************************************************************
* 文件名称: PCMultiThreadSupport.c
* 文件说明: PC平台下的多线程支持
* 说 明:
***********************************************************************/
//#define _MT
#if defined(LINUX_PLAT)
#include <pthread.h> /*pthread_create, pthread_exit , pthread_join*/
#elif defined(WIN32)
#include <windows.h>
#include <process.h> /* _beginthread, _endthread */
#endif
#include "PCMultiThreadSupport.h"
#include "SMThreadMark.h"
/*返回值的正常或异常*/
#define COMM_ERR -1 /*错误*/
#define COMM_OK 0 /*正常*/
typedef struct _T_THREAD_PARA{
int nThreadNO; /*线程号*/
char* pcLogFileName; /*线程LOG文件名*/
EN_THREAD_MARK_SMTM enThreadMark; /*线程标识*/
}T_THREAD_PARA;
/*********************************************************************
* 函数名称: Threadtask
* 函数说明: 线程任务的执行的入口
* 输入 : int nThreadNO
* 功能 : 开始执行本线程任务
***********************************************************************/
extern int Threadtask(int nThreadNO, EN_THREAD_MARK_SMTM enThreadMark);
/*线程参数使用 : 全局*/
T_THREAD_PARA g_tThreadPara = {1, LOG_FILE_NAME(T1), EN_MULTIPLE_THREAD};
/*********************************************************************
* 函数名称: MultiThreadTaskEntrance
* 函数说明: 多线程任务入口
* 输入 : void( __cdecl *start_address )( void * )
* 输出 : void
***********************************************************************/
#if defined(LINUX_PLAT)
void*
#elif defined(WIN32)
void
#endif
MultiThreadTaskEntrance(void* pvPara)
{
T_THREAD_PARA tThreadPara = *(T_THREAD_PARA*)pvPara;
/*执行线程任务*/
Threadtask(tThreadPara.nThreadNO, tThreadPara.enThreadMark);
#if defined(LINUX_PLAT)
return NULL;
#elif defined(WIN32)
_endthread();
return;
#endif
}
#if defined(LINUX_PLAT)
pthread_t g_ThreadID;
#elif defined(WIN32)
unsigned long g_ThreadID;
#endif
/*********************************************************************
* 函数名称: CreateMultiThreadTask
* 函数说明: PC平台中执行多线程任务时在这里创建多线程的任务并执行
* 输入 : 只开线程1:LOG:LOG_FILE_NAME(T1)
* 输出 : int COMM_OK/COMM_ERR
***********************************************************************/
int CreateMultiThreadTask(void)
{
/*执行任务*/
#if defined(LINUX_PLAT)
if (0 != pthread_create(&g_ThreadID, NULL, MultiThreadTaskEntrance, &g_tThreadPara))return COMM_ERR;
#elif defined(WIN32)
if (-1 == (g_ThreadID = _beginthread( MultiThreadTaskEntrance, 0, &g_tThreadPara )))return COMM_ERR;
#endif
return COMM_OK;
}
/*********************************************************************
* 函数名称: WaitForThreadEnd
* 函数说明: PC平台中执行多线程任务时在这里用来线程结束的等待
* 输入 : 只开线程1:LOG:LOG_FILE_NAME(T1)
* 输出 : void
***********************************************************************/
void WaitForThreadEnd(void)
{
#if defined(LINUX_PLAT)
pthread_join((pthread_t)g_ThreadID, NULL);
#elif defined(WIN32)
HANDLE * hThreadID = (HANDLE *)&g_ThreadID;
WaitForMultipleObjects(1, hThreadID, TRUE, INFINITE);
#endif
}
没有合适的资源?快使用搜索试试~ 我知道了~
PC多线程支持模块 支持Windows和Linux
共2个文件
h:1个
c:1个
4星 · 超过85%的资源 需积分: 10 14 下载量 110 浏览量
2011-07-07
11:19:30
上传
评论
收藏 2KB RAR 举报
温馨提示
支持Windows和Linux的PC多线程支持模块,用于实现线程的方便创建和线程管理的模块化
资源推荐
资源详情
资源评论
收起资源包目录
PC多线程支持模块.rar (2个子文件)
PCMultiThreadSupport.c 3KB
PCMultiThreadSupport.h 834B
共 2 条
- 1
资源评论
- wangdannnnnnn2014-06-20非常粗糙,linux的实现貌似不大对吧?
- fengyelengfeng2017-06-27还可以,适合初学者
meirux11
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功