2 回答

TA貢獻1854條經驗 獲得超8個贊
這個是完全取決于你的需求。如果你只是做控制同一個數據源使用的,就可以一個線程,分別在收到不同的消息,調用不同的函數。畢竟你只有一個鍵盤,不會真的同時收到兩個事件。這種構架下面,兩個函數必須比較短不能有堵塞,或者等待(大多數情況是這樣的)。另外一種情況是,當你的處理量比較大,則需要多線程,也就是三個線程,一個線程收消息事件,另外兩個分別處理事件,如果你不是多核CPU,其結果和上面的構架是一樣的。在多線程構架下面,如果是對同一個數據體處理,那么效果和前者是一樣,甚至更差。至于這么建立多線程,我就不說,這個真的需要你自己去看看。

TA貢獻1772條經驗 獲得超6個贊
1、C++多線程也可以使用UNIX C的庫函數,pthread_mutex_t,pthread_create,pthread_cond_t,pthread_detach,pthread_mutex_lock/unlock,等等。在使用多線程的時候,你需要先創建線程,使用pthread_create,你可以使主線程等待子線程使用pthread_join,也可以使線程分離,使用pthread_detach。線程使用中最大的問題就是同步問題,一般使用生產著消費者模型進行處理,使用條件變量pthread_cond_t,pthread_mutex,pthread_cond_wait來實現。
2、例程:
//創建5個線程
#include <pthread.h>
#include <stdlib.h>
void* work_thread(void* arg)
{
//線程執行體
return 0;
}
int main(int argc,char* argv[])
{
int nthread = 5;//創建線程的個數
pthread_t tid;//聲明一個線程ID的變量;
for(int i=0;i<nthread;i++)
{
pthread_create(&tid,NULL,work_thread,NULL);
}
sleep(60);//睡眠一分鐘,你可以看下線程的運行情況,不然主進程會很快節結束了。
}
pthread_create(&tid,NULL,work_thread,NULL);//創建線程的函數,第一個參數返回線程的ID;第二個參數是線程的屬性,一般都置為NULL;第三個參數是線程函數,線程在啟動以后,會自動執行這個函數;第四個參數是線程函數的參數,如果有需要傳遞給線程函數的參數,可以放在這個位置,可以是基礎類型,如果你有不止一個參數想傳進線程函數,可以做一個結構體,然后傳入。
- 2 回答
- 0 關注
- 168 瀏覽
添加回答
舉報