2 回答
TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
這個(gè)是完全取決于你的需求。如果你只是做控制同一個(gè)數(shù)據(jù)源使用的,就可以一個(gè)線程,分別在收到不同的消息,調(diào)用不同的函數(shù)。畢竟你只有一個(gè)鍵盤,不會(huì)真的同時(shí)收到兩個(gè)事件。這種構(gòu)架下面,兩個(gè)函數(shù)必須比較短不能有堵塞,或者等待(大多數(shù)情況是這樣的)。另外一種情況是,當(dāng)你的處理量比較大,則需要多線程,也就是三個(gè)線程,一個(gè)線程收消息事件,另外兩個(gè)分別處理事件,如果你不是多核CPU,其結(jié)果和上面的構(gòu)架是一樣的。在多線程構(gòu)架下面,如果是對(duì)同一個(gè)數(shù)據(jù)體處理,那么效果和前者是一樣,甚至更差。至于這么建立多線程,我就不說,這個(gè)真的需要你自己去看看。
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
1、C++多線程也可以使用UNIX C的庫函數(shù),pthread_mutex_t,pthread_create,pthread_cond_t,pthread_detach,pthread_mutex_lock/unlock,等等。在使用多線程的時(shí)候,你需要先創(chuàng)建線程,使用pthread_create,你可以使主線程等待子線程使用pthread_join,也可以使線程分離,使用pthread_detach。線程使用中最大的問題就是同步問題,一般使用生產(chǎn)著消費(fèi)者模型進(jìn)行處理,使用條件變量pthread_cond_t,pthread_mutex,pthread_cond_wait來實(shí)現(xiàn)。
2、例程:
//創(chuàng)建5個(gè)線程
#include <pthread.h>
#include <stdlib.h>
void* work_thread(void* arg)
{
//線程執(zhí)行體
return 0;
}
int main(int argc,char* argv[])
{
int nthread = 5;//創(chuàng)建線程的個(gè)數(shù)
pthread_t tid;//聲明一個(gè)線程ID的變量;
for(int i=0;i<nthread;i++)
{
pthread_create(&tid,NULL,work_thread,NULL);
}
sleep(60);//睡眠一分鐘,你可以看下線程的運(yùn)行情況,不然主進(jìn)程會(huì)很快節(jié)結(jié)束了。
}
pthread_create(&tid,NULL,work_thread,NULL);//創(chuàng)建線程的函數(shù),第一個(gè)參數(shù)返回線程的ID;第二個(gè)參數(shù)是線程的屬性,一般都置為NULL;第三個(gè)參數(shù)是線程函數(shù),線程在啟動(dòng)以后,會(huì)自動(dòng)執(zhí)行這個(gè)函數(shù);第四個(gè)參數(shù)是線程函數(shù)的參數(shù),如果有需要傳遞給線程函數(shù)的參數(shù),可以放在這個(gè)位置,可以是基礎(chǔ)類型,如果你有不止一個(gè)參數(shù)想傳進(jìn)線程函數(shù),可以做一個(gè)結(jié)構(gòu)體,然后傳入。
- 2 回答
- 0 關(guān)注
- 200 瀏覽
添加回答
舉報(bào)
