首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

跨平台编程方法 有关问题

2013-07-16 
跨平台编程方法 问题例如我想加锁然后 我在头文件里面这样定义#ifdef WIN_32HANDLE lock1#elsepthread_mu

跨平台编程方法 问题
例如
我想加锁
然后 我在头文件里面这样定义
#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
}

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


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

热点排行