ACE的线程

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章