/*********************************************************************
* 文件名称: 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
}