我有一個GTK應用程序,我需要並行運行幾個任務。應用程序從串口接收數據,然後根據數據,它必須在標籤上顯示文本並播放音頻。我正在使用基於事件的串行通信,如果收到數據,則會使標誌變爲高電平。gtk應用程序中的多任務
在主循環中,我創建了3個無限制地運行的線程。
Thread1 to read serial data
Thread2 to display data on gtk label
Thread3 to play audio
當從串口事件接收到信號時,線程1被激活。讀取數據後,它將設置一個高位標誌,然後激活Thread2。然後,線程2解碼串行數據並在標籤上顯示其信息。然後它設置另一個高標誌來激活Thread3,然後Thread3播放一個音頻文件。
我需要並行運行Thread2和Thread3。這樣標籤和音頻上顯示的文字應該同時完成。目前,我做這樣的事情如下:
Thread2
{
while(1)
{
if(serialData == TRUE)
{
//decode the serial data and display it
startAudio = TRUE //Indicate Thread3 to play audio
serialData = FALSE
}
}
}
Thread3
{
while(1)
{
if(startAudio == TRUE)
{
//play audio
startAudio = FALSE
}
}
}
在當前形勢下,我沒有太多的串行數據解碼,所以文本顯示和音頻無論是外觀還是同步。但是如果數據很大,那麼我猜他們都不會同步。有什麼辦法可以同時運行這些任務嗎?
如果您使用異步庫(如Gio,Gstreamer),那麼應該沒有理由爲您提到的任務使用線程。我並不是說你不能使用它們,但如果可以的話,避免使用線程通常是一個好主意。 – jku