您好,欢迎来到九壹网。
搜索
您的当前位置:首页FXThread使用

FXThread使用

来源:九壹网


FXThread使用

Fox库中对多线程进行了封装,可以比较轻松的实现跨平台的多线程开发,而不用关心过多的繁缛细节,个人感觉比较有价值,可以说的上是C++多线程开发的一个模板,这里简单介绍一下使用方式。

涉及多线程的类有:FXMutexLock、FXThread,当然还有同步,condition等类,这里就不再多说。

对于线程同步,互斥是通过临界区的方式实现的,win和pthread各自实现跨平台效果,这里Fox使用了一个小技巧RAII,在FXMutex类上封装了一套FXMutexLock,不需要用户过多考虑加锁解锁的细节,避免死锁的出现。

而FXThread则实现线程的创建、状态等一系列操作,提供了一个线程的基类来供用户使用,这套机制用起来很合理,给人一种很惬意的感觉。

不多说了,如下。

class ThreadShow

{

public:

void show(int nID)

{

FXMutexLock T(m_mutex);

//T.lock();

//m_mutex.lock();

cout<cout<<\"thread ID\"<//T.~T();

//T.unlock();

//m_mutex.unlock();

}

protected:

private:

FXMutex m_mutex;

};

class TestThread: public FXThread

{

public:

TestThread(ThreadShow* a,int nThreadID);

~TestThread();

virtual int run();

ThreadShow* m_test;

protected:

private:

int m_nThreadID;

};

TestThread::TestThread(ThreadShow* a,int nThreadID)

{

m_test = a;

m_nThreadID = nThreadID;

}

TestThread::~TestThread()

{

}

int TestThread::run()

{

m_test->show(m_nThreadID);

return 0;

}

int main(int argc, char* argv[])

{

const int nThreadCount = 10;

int threadArray[nThreadCount];

ThreadShow* test = new ThreadShow;

for (int i=0;i{

TestThread* pThread = new TestThread(test,i+1);

threadArray[i] = (int)pThread;

pThread->start();

}

for (i=0;i{

((TestThread* )(threadArray[i]))->join();

}

int threadsum = 0;

do

{

threadsum = 0;

for (int i=0;i{

if(threadArray[i] != 0 && !((TestThread* )(threadArray[i]))->running())

{

delete ((TestThread* )(threadArray[i]));

threadArray[i] = 0;

}

else if (threadArray[i])

{

((TestThread* )(threadArray[i]))->join();

}

threadsum += threadArray[i];

}

} while(threadsum>0);

delete test;

test = NULL;

return 0;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务