Qt 中多線程信號(hào)傳遞 實(shí)例
Qt 多線程的信號(hào)傳遞
- QObject::connect(const QObject * sender, const char * signal,
- const QObject * receiver, const char * method,
- Qt::ConnectionType type = AutoConnection);
這個(gè)函數(shù)默認(rèn)(即***一個(gè)參數(shù)type為AutoConnection)情況下只能在相同線程下的不同類之間傳遞信號(hào),若想要把信號(hào)傳遞給另外一個(gè)線程下運(yùn)行的類實(shí)例,必須要修改type的枚舉值。
可以改為Qt::QueuedConnection,這樣就能傳遞給其他線程下的類實(shí)例了。
另外,對于帶參數(shù)的消息,參數(shù)的數(shù)據(jù)類型必須為Qt支持的元數(shù)據(jù)類型,如int、QString等,若要傳遞自定義的數(shù)據(jù)類型,必須把自定義的數(shù)據(jù)類型注冊為元數(shù)據(jù)類型。
舉個(gè)例子,比如我再兩個(gè)線程下分別運(yùn)行了兩個(gè)類實(shí)例MainWindow *mainWnd和Manager *mngr,MainWindow把方法addUsers(LPHOSTSTRUCT )設(shè)為槽,Manager把方法NewUserCome(LPHOSTSTRUCT )設(shè)為消息,其中LPHOSTSTRUCT為自定義的數(shù)據(jù)類型。要是想在Manager中順利的使用emit NewUserCome(lpHost)(lpHost為LPHOSTSTRUCT的一個(gè)實(shí)例),就要經(jīng)過兩步
一、注冊LPHOSTSTRUCT為Qt的元數(shù)據(jù)類型
- qRegisterMetaType<LPHOSTSTRUCT> ("LPHOSTSTRUCT");
二、調(diào)用QObject::connect方法,連接信號(hào)和槽,這里要注意修改connect方法的第五個(gè)參數(shù)
- QObject::connect(mngr, SIGNAL(NewUserCome(LPHOSTSTRUCT)), mainWnd, SLOT(addUser(LPHOSTSTRUCT)));
小結(jié):Qt 中多線程信號(hào)傳遞 實(shí)例的內(nèi)容介紹完了,希望本文能幫你解決問題。