• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-167  評論-8  文章-0  trackbacks-0

            有過在不同的操作系統下用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.終止線程

            在線程函數體中ACE_Thread::exit()調用即可終止線程執行。

            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 <iostream>
            using namespace std;

            void* worker(void *arg)
            {
                for(int i=0;i<10;i++)
                {
                    ACE_OS::sleep(1);
                    cout<<endl<<"hello world"<<endl;
                }
                return NULL;
            }

            int main(int argc, char *argv[])
            {
                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::join(threadHandle);

                return 0;
            }

            在這個簡單的例子中,創建了1個工作者線程,執行程序中定義的worker()函數。然后阻塞主函數,待線程結束后退出程序。


            posted on 2009-07-28 16:05 老馬驛站 閱讀(383) 評論(0)  編輯 收藏 引用 所屬分類: ACE
            A狠狠久久蜜臀婷色中文网| 狠狠色丁香久久婷婷综合| 婷婷伊人久久大香线蕉AV| 久久久女人与动物群交毛片| 奇米综合四色77777久久| 精品久久久久香蕉网| 999久久久免费国产精品播放| 国产激情久久久久影院小草| 精品久久人妻av中文字幕| 91亚洲国产成人久久精品| 亚洲欧洲中文日韩久久AV乱码| 久久亚洲高清综合| 免费久久人人爽人人爽av| 一本久道久久综合狠狠爱| 亚洲国产成人久久综合一 | 色婷婷狠狠久久综合五月| 国产真实乱对白精彩久久| 亚洲狠狠婷婷综合久久久久| 国内精品久久久久久久久| 亚洲精品高清国产一线久久| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 精品水蜜桃久久久久久久| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲女久久久噜噜噜熟女| 国内精品久久久久久99蜜桃| 国内精品久久久久久中文字幕| 少妇人妻88久久中文字幕| 久久精品国产亚洲精品| 久久久久四虎国产精品| 久久久久久伊人高潮影院| 国产精品无码久久综合网| 久久免费的精品国产V∧| 尹人香蕉久久99天天拍| 精品久久久久国产免费| 精品人妻久久久久久888| 欧美伊人久久大香线蕉综合| 人妻中文久久久久| 人妻少妇精品久久| 久久免费视频6| 亚洲国产精品一区二区三区久久 | 亚洲成色www久久网站夜月|