QT多線程傳遞參數 信號 傳遞uchar無符號數組 給槽函數 uchar*

   

1.主線程建立連接

 connect(thread, SIGNAL(signal( QByteArray )), this, SLOT(slot( QByteArray)));

 

 

試過直接傳遞uchar*指針 在第五個參數設置Qt::DirectConnection 可用  看到有說多線程不安全

Qt::AutoConnection: 默認值,使用這個值則連接類型會在信號發送時決定。如果接收者和發送者在同一個線程,則自動使用Qt::DirectConnection類型。如果接收者和發送者不在一個線程,則自動使用Qt::QueuedConnection類型。

Qt::DirectConnection:槽函數會在信號發送的時候直接被調用,槽函數運行於信號發送者所在線程。效果看上去就像是直接在信號發送位置調用了槽函數。這個在多線程環境下比較危險,可能會造成奔潰。

Qt::QueuedConnection:槽函數在控制回到接收者所在線程的事件循環時被調用,槽函數運行於信號接收者所在線程。發送信號之後,槽函數不會立刻被調用,等到接收者的當前函數執行完,進入事件循環之後,槽函數纔會被調用。多線程環境下一般用這個。

隊列連接:內部通過postEvent實現的。不是實時調用的,槽函數永遠在槽函數對象所在的線程中執行。如果信號參數是引用類型,則會另外複製一份的。線程安全的。

 

改用傳遞QByteArray

 

2.子線程發送信號

 

 

QByteArray str;
    str=QByteArray((char*)array,len); ;   
    emit signal(str);//發送給主線程處理

 

3.主線程槽函數 強轉回uchar

 

void MainWindow::slot( QByteArray data)
{
    uchar*  ch;
    ch=(uchar*)data.data();//強轉回uchar

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章