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