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


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