OpenThreads庫介紹——Thread

來源:互聯網
上載者:User

OpenThreads庫是一個輕量級的跨平台多線程庫,在2.x之前是獨立發展的一個庫,在2.x後併入到OSG的源碼中,OSG中大量的多線程操作都是基於這個庫編寫的。(事實上使用該庫是曆史原因的問題,在OSG創立的時候,C++標準中並沒有C++11引入的線程庫),庫的詳細介紹參考:OpenThreads網站 Thread線程

線程實作類別。它是一個物件導向的線程實現介面,每定義一個Thread 類,就相當於定義了一個共用進程資源,但是可以獨立調度的線程。通過重寫run()和cancel()這兩個成員函數,即可實現線程運行時和取消時的操作;通過調用start()和cancel(),可以啟動或中止已經定義的進程對象。 1. 線程的使用

OpenThread的Thread類是一個純虛類,需要子類重寫run方法,提供線程啟動並執行函數入口地址,例如

class MyThread : public OpenThreads::Thread{public:    MyThread(){}    ~MyThread(){}    virtual void run()    {        for (int i = 0; i < 10; ++i)        {            std::cout << "My Thread Running" << std::endl;        }    }};

線程在產生之後,可以使用join和detach到建立它的線程,如果使用join的方式,那麼建立它的線程必須等待直到這個線程完成,如果是detach的方式,那麼建立線程的線程和被建立的線程二者之間沒有任何關係,被建立的線程相當於完全獨立出來了。在OpenThread中預設使用的就是detach的模式。 detach方式

int main(){    MyThread thread;    thread.start();    for (int i = 0; i < 10; ++i)    {        std::cout << "Main Thread Running" << std::endl;    }    OpenThreads::Thread::microSleep(1500000);

輸出

join方式

int main(){    MyThread thread;    thread.start();    thread.join();    for (int i = 0; i < 10; ++i)    {        std::cout << "Main Thread Running" << std::endl;    }    OpenThreads::Thread::microSleep(1500000);}

輸出

可以看到二者的輸出不同,join方式中主線程會等待MyThread線程執行完成之後才開始繼續執行,關於join和detach可以參考:線程的join 和detach狀態(線程的分離與結合) 2. 其他函數

在Thread類中還有兩個比較常用的函數,都是靜態函數。

static int YieldCurrentThread();
掛起當前執行的線程

static int microSleep(unsigned int microsec);
使得當前線程進入睡眠

兩者可以讓當前的線程停止執行,轉而讓進程處理其他線程的工作。 參考資料

1.線程的join 和detach狀態(線程的分離與結合)
2.OpenThreads庫的使用-Thread

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.