条件编译 实现 android和windows上线程创建
来源:互联网 发布:mac 屏幕睡眠时间 编辑:程序博客网 时间:2024/06/05 03:19
// Thread.cpp:
#include "CThread.h"
CThread::CThread()
{
#ifdef OS_WINDOWS
m_hThread = NULL;
#endif
}
CThread::~CThread()
{
#ifdef OS_WINDOWS
if (NULL != m_hThread)
{
CloseHandle(m_hThread);
}
#endif
}
#ifdef OS_WINDOWS
THREAD_HANDLE CThread::create(void(*pThreadFun)(void*), void* arg)
{
UINT uiThreadID;
m_hThread = (HANDLE)(::_beginthreadex(NULL, NULL, (WIN32threadFun)pThreadFun, arg, NULL, &uiThreadID));
return m_hThread;
}
#endif
#ifdef ANDROID
THREAD_HANDLE CThread::create(void*(*pThreadFun)(void*), void* arg)
{
int result = pthread_create(&m_hThread,NULL,(LINUXthreadFun)pThreadFun,arg);
if (result)
{
return 0;
}
return m_hThread;
}
#endif
void CThread::sleep(int ms)
{
#ifdef ANDROID
pthread_mutex_t fakeMutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t fakeCond = PTHREAD_COND_INITIALIZER;
struct timespec timeToWait;
struct timeval now;
int rt;
gettimeofday(&now,NULL);
long seconds = ms/1000;
long nanoseconds = (ms - seconds * 1000) * 1000000;
timeToWait.tv_sec = now.tv_sec + seconds;
timeToWait.tv_nsec = now.tv_usec*1000 + nanoseconds;
if (timeToWait.tv_nsec >= 1000000000)
{
timeToWait.tv_nsec -= 1000000000;
timeToWait.tv_sec++;
}
pthread_mutex_lock(&fakeMutex);
rt = pthread_cond_timedwait(&fakeCond, &fakeMutex, &timeToWait);
pthread_mutex_unlock(&fakeMutex);
#endif
#ifdef OS_WINDOWS
Sleep(ms);
#endif
}
void CThread::exit(int code)
{
#ifdef ANDROID
pthread_exit((void*)code);
#endif
#ifdef OS_WINDOWS
_endthreadex(code);
#endif
}
#include "CThread.h"
CThread::CThread()
{
#ifdef OS_WINDOWS
m_hThread = NULL;
#endif
}
CThread::~CThread()
{
#ifdef OS_WINDOWS
if (NULL != m_hThread)
{
CloseHandle(m_hThread);
}
#endif
}
#ifdef OS_WINDOWS
THREAD_HANDLE CThread::create(void(*pThreadFun)(void*), void* arg)
{
UINT uiThreadID;
m_hThread = (HANDLE)(::_beginthreadex(NULL, NULL, (WIN32threadFun)pThreadFun, arg, NULL, &uiThreadID));
return m_hThread;
}
#endif
#ifdef ANDROID
THREAD_HANDLE CThread::create(void*(*pThreadFun)(void*), void* arg)
{
int result = pthread_create(&m_hThread,NULL,(LINUXthreadFun)pThreadFun,arg);
if (result)
{
return 0;
}
return m_hThread;
}
#endif
void CThread::sleep(int ms)
{
#ifdef ANDROID
pthread_mutex_t fakeMutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t fakeCond = PTHREAD_COND_INITIALIZER;
struct timespec timeToWait;
struct timeval now;
int rt;
gettimeofday(&now,NULL);
long seconds = ms/1000;
long nanoseconds = (ms - seconds * 1000) * 1000000;
timeToWait.tv_sec = now.tv_sec + seconds;
timeToWait.tv_nsec = now.tv_usec*1000 + nanoseconds;
if (timeToWait.tv_nsec >= 1000000000)
{
timeToWait.tv_nsec -= 1000000000;
timeToWait.tv_sec++;
}
pthread_mutex_lock(&fakeMutex);
rt = pthread_cond_timedwait(&fakeCond, &fakeMutex, &timeToWait);
pthread_mutex_unlock(&fakeMutex);
#endif
#ifdef OS_WINDOWS
Sleep(ms);
#endif
}
void CThread::exit(int code)
{
#ifdef ANDROID
pthread_exit((void*)code);
#endif
#ifdef OS_WINDOWS
_endthreadex(code);
#endif
}
0 0
- 条件编译 实现 android和windows上线程创建
- windows 使用关键段和条件变量实现的生产者和消费者线程同步
- windows 创建线程和线程同步
- 在windows上,AfxBeginThread 和 CreateThread 创建的线程是有一点区别的
- linux创建线程和windows创建线程对比
- Windows和Linux上分别怎样实现等待某个线程结束?---用WaitForSingleObject和pthread_join
- windows下进程和线程的创建
- Windows线程的创建和终止
- Android 项目创建和编译
- 在windows上编译Android静态库
- 预处理实现条件编译
- java实现条件编译
- VS中使用define和undef实现条件编译(csc.exe条件编译)
- 线程间同步实现--通过互斥锁和条件变量
- Android定时器和线程实现
- windows和linux线程内核实现
- windows 创建子线程
- windows创建线程
- Undefined symbols for architecture i386或者armv7: “_OBJC_CLASS_$_XXX
- Linux查看CPU和内存使用情况
- openlldp-0.4alpha实现详解(四)——rx_sm模块
- Redis和Memcache对比及选择
- jquery pop弹出框和锁屏
- 条件编译 实现 android和windows上线程创建
- 使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket
- SurfaceView
- 堆 和 栈的 区别(经典)
- 图结构练习——BFS——从起始点到目标点的最短步数(bfs)
- BZOJ 1000: A+B Problem
- 黄金队列 蓝桥杯
- Android4.0中AppWidget的一些新玩意体验
- [中间件] 消息处理利器 ActiveMQ 的介绍 & Stomp 协议的使用