程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> libjingle線程機制

libjingle線程機制

編輯:C++入門知識

    libjingle包裝了所有的線程,包括signaling thread,worker thread, 和其它任何線程,用talk_base::Thread來包裝。所有的 Thread對象由ThreadManager來管理 ,ThreadManager可以在線程內任意地方調CurrentThread()用來獲取線程指針。

    Thread對象繼承了MessageQueue實現了類似於windows窗口消息機制,Thread提供了Get、Peek、Post、PostDelayed等一系列消息操作的接口。一個對象想通過MessageQueue接收消息必須繼承並實現MessageHandler。MessageHandler定義了OnMessage方法,這個方法在MessageQueue消息中調用。

有兩種創建線程的方法

1.AutoThread 用libjingle的Thread對象包裝的操作系統線程,並使它成為ThreadManager對象的線程池中的當前線程,(也就是說,當用Thread::CurrentThread調用時返回引線程)

2.Thread 典型用為worker thread,必須創建一個Thread 對象,調用ThreadManager::Add或者ThreadManager::SetCurrent來將它加入池,並調用Run來開始它的循環代碼,或者Start來開始線程監聽。

    你可以向任何線程的任何對象發送消息,只要這個對象繼承了talk_base::MessageHandler簡單的示例如下:

class Test:public talk_base::MessageHandler
{
public:
    Test()
    {i=0;}
    void OnMessage(talk_base::Message *pmsg)
    {
        if (pmsg->message_id==50)
        {
            talk_base::Thread * curThread=talk_base::Thread::Current();
            printf("thread run count=%d threadId=%d\n",++i,curThread->GetThreadId());
        }

    }

    int i;
};

int _tmain(int argc, _TCHAR* argv[])
{
    talk_base::Thread thread;
    thread.Start();

    Test test;

    for (int i=0;i<100;++i)
    {
        Sleep(30);
        thread.Post(&test,i);
    }
    


    getchar();
    return 0;
}

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved