读书人

跨平台编程方法 有关问题

发布时间: 2013-07-16 22:38:05 作者: rapoo

跨平台编程方法 问题
例如
我想加锁
然后 我在头文件里面这样定义
#ifdef WIN_32
HANDLE lock1;
#else
pthread_mutex_t lock1;
#endif
然后定义函数对它操作
void createLock()
{
#ifdef WIN_32
lock1 = CreateMutex(NULL,TRUE,NULL);
#else
lock1 = PTHREAD_MUTEX_INITIALIZER;
#endif
}

void setLock()
{
#ifdef WIN_32
ReleaseMutex(lock1);
WaitForSingleObject(lock1,INFINITE);
#else
pthread_mutex_lock(&lock1);
#endif
}

但是这样做 似乎不是很灵活,假如我接下来还要创建更多的锁.....
应该怎么样比较规范合理的写这样类型的代码呢?
跨平台 类 编程
[解决办法]

引用:
Quote: 引用:

做个类封装起来


求一demo 自己写的感觉比较乱 谢谢


.h
#ifndef _Mutex_H
#define _Mutex_H

#ifndef _WIN32
#include <pthread.h>
#else
#include <windows.h>
#endif

class Mutex
{
public:
Mutex();
~Mutex();

void Lock();
void Unlock();
private:
#ifdef _WIN32
HANDLE m_mutex;
#else
pthread_mutex_t m_mutex;
#endif
};

#endif


.cpp
#include "Mutex.h"

Mutex::Mutex()
{
#ifdef _WIN32
m_mutex = ::CreateMutex(NULL, FALSE, NULL);
#else
pthread_mutex_init(&m_mutex, NULL);
#endif
}


Mutex::~Mutex()
{
#ifdef _WIN32
::CloseHandle(m_mutex);
#else
pthread_mutex_destroy(&m_mutex);
#endif
}


void Mutex::Lock()
{
#ifdef _WIN32
WaitForSingleObject(m_mutex, INFINITE);
#else
pthread_mutex_lock(&m_mutex);
#endif
}


void Mutex::Unlock()
{
#ifdef _WIN32
::ReleaseMutex(m_mutex);
#else
pthread_mutex_unlock(&m_mutex);
#endif
}

------解决方案--------------------


用类封装线程的时候不能用普通成员函数,要用静态成员函数

读书人网 >C++

热点推荐