有過在不同的作業系統下用c++進行過多執行緒程式設計的朋友對那些執行緒處理的api可能深有體會,這些api提供了相同或是相似的功能,但是它們的api的差別卻極為懸殊,十分令人頭痛。
ace_thread提供了對不同os的執行緒呼叫的簡單包裝,通過乙個通用的介面進行處理執行緒建立、掛起、取消和刪除等問題。
一. 執行緒入口函式
所有執行緒必須從乙個指定的函式開始執行,該函式稱為執行緒函式,它必須具有下列原型:
void* worker(void *arg) {}
該函式輸入乙個
void *
型的引數,可以在建立執行緒時傳入。
注意:所有的執行緒啟動函式(方法)必須是靜態的或全域性的(就如同直接使用os執行緒api時所要求的一樣)。
二.執行緒基本操作
1.建立乙個執行緒
乙個程序的主線程是由作業系統自動生成,如果你要讓乙個主線程建立額外的執行緒,可以通過ace_thread::spawn()實現,該函式一般的使用方式如下:
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::spawn((ace_thr_func)worker) 來建立乙個worker的執行緒。
另外,ace還提供了ace_thread::spawn_n函式來建立多個執行緒。
2.終止執行緒
3.設定執行緒的相對優先順序
當乙個執行緒被首次建立時,它的優先順序等同於它所屬程序的優先順序。乙個執行緒的優先順序是相對於其所屬的程序的優先順序而言的。可以通過呼叫
ace_thread::setprio
函式改變執行緒的相對優先順序,該函式的呼叫方式如下:
ace_thread::setprio(threadhandle,ace_default_thread_priority)
4.掛起及恢復執行緒
掛起執行緒可以通過來實現,它能暫停乙個執行緒的執行,其呼叫方式如下ace_thread::suspend(threadhandle) 。
相應的,可以通過ace_thread::resume(threadhandle) 恢復被掛起的執行緒的執行。
5.等待執行緒結束
在主函式中呼叫ace_thread::join(threadhandle)可阻塞主函式,直道執行緒結束才能繼續執行。
6.停止執行緒
在主函式中呼叫ace_thread::cancel (threadhandle)可停止執行緒的執行(在unix底下可以,而在windows下好像不起作用,有待檢驗)。
三.程式示例
下面例子演示了如何用ace建立乙個執行緒。
#include
"ace/thread.h"
#include
"ace/synch.h"
#include
using
namespace std;
void* worker(void *arg)
int main(int argc, char *argv)
在這個簡單的例子中,建立了1個工作者執行緒,執行程式中定義的worker()函式。然後阻塞主函式,待執行緒結束後退出程式。
ACE執行緒管理機制 執行緒的建立與管理
有過在不同的作業系統下用c 進行過多執行緒程式設計的朋友對那些執行緒處理的api可能深有體會,這些api提供了相同或是相似的功能,但是它們的api的差別卻極為懸殊,十分令人頭痛。ace thread提供了對不同os的執行緒呼叫的簡單包裝,通過乙個通用的介面進行處理執行緒建立 掛起 取消和刪除等問題。...
ACE執行緒管理機制 執行緒的建立與管理
有過在不同的作業系統下用c 進行過多執行緒程式設計的朋友對那些執行緒處理的api可能深有體會,這些api提供了相同或是相似的功能,但是它們的api的差別卻極為懸殊,十分令人頭痛。ace thread提供了對不同os的執行緒呼叫的簡單包裝,通過乙個通用的介面進行處理執行緒建立 掛起 取消和刪除等問題。...
ACE執行緒管理機制 執行緒的建立與管理
有過在不同的作業系統下用c 進行過多執行緒程式設計的朋友對那些執行緒處理的api可能深有體會,這些api提供了相同或是相似的功能,但是它們的api的差別卻極為懸殊,十分令人頭痛。ace thread提供了對不同os的執行緒呼叫的簡單包裝,通過乙個通用的介面進行處理執行緒建立 掛起 取消和刪除等問題。...