ACE執行緒管理機制 執行緒的建立與管理

2021-04-25 01:45:55 字數 1840 閱讀 3546

有過在不同的作業系統下用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的執行緒呼叫的簡單包裝,通過乙個通用的介面進行處理執行緒建立 掛起 取消和刪除等問題。...