ACE的线程管理 ACE_Thread_Manager
其中常用的方法有:
spawn() :创建一个线程
spawn_n() : 创建一组线程
wait():阻塞, 直到线程管理器中的所有线程都已经退出
join():等待某一线程退出,并获得其退出状态
exit():退出一个线程,并释放该线程资源
{
ACE_Thread_Manager::instance->spawn_n(4, (ACE_THR_FUNC)print, 0, THR_JOINABLE|THR_NEW_LWP);
ACE_Thread_Manager::instance->wait();
return 0;
}
备注:spawn_n()参数说明, 4为创建线程的数量, print为线程处理函数,即线程进入点函数。 后面的0是固定参数。
但需要注意的一点是,线程的进入点函数必须是静态的或者是全局的
线程的基本操作:创建、终止等
一、线程入口函数(即线程进入点函数)
void *worker(void *arg)
{
}
该函数有一个void *的参数,可以在创建线程的时候传入进线程,如上面所说,该函数必须是静态的或者全局的。
二、线程的创建
一个进程的主线程是由系统自动生成,如要生成额外的线程,可以使用ACE_Thread::spawn(),或者
ACE_Thread::spawn_n()。
具体使用方法如下:
ACE_thread_t threadId;
ACE_hthread_t threadHandle;
ACE_Thread::spawn(
(ACE_THR_FUNC)worker, //线程执行函数
NULL, //执行函数参数
THR_JOINABLE | THR_NEW_LWP,
&threadId,
&threadHandle
);
三、终止线程:
ACE_Thread::exit(),即可终止线程的执行。
四、挂起和恢复线程:
挂起线程可以通过ACE_Thread::suspend()来实现,它能暂停一个线程的执行,其调用方式如下ACE_Thread::suspend(threadHandle) 。
相应的,可以通过ACE_Thread::resume(threadHandle) 恢复被挂起的线程的执行。
五、等待线程结束:
在主函数中调用ACE_Thread::join()可以阻塞主函数,直到线程结束才继续运行。
六、举例子:
#include "ace/Thread_Manager.h"
#include <iostream>
void print (void* args)
{
int id = ACE_Thread_Manager::instance()->thr_self();
std::cout << "Thread Id: " << id << std::endl;
}
void prints(void *args)
{
std::cout<<"hello world!"<<std::endl;
}
int ACE_TMAIN (int argc, ACE_TCHAR* argv[])
{
ACE_Thread_Manager::instance()->spawn_n(
4, (ACE_THR_FUNC) print, 0, THR_JOINABLE | THR_NEW_LWP);
// wait until all the threads of the manager exit
ACE_Thread_Manager::instance()->wait();
ACE_Thread_Manager::instance()->spawn((ACE_THR_FUNC)prints, 0, THR_JOINABLE|THR_NEW_LWP);
//ACE_Thread_Manager::instance()->wait();
getchar();
return 0;
}
更详细的说明,请参考http://www.cnblogs.com/TianFang/archive/2006/12/04/581369.html