Re: [問題] 加入thread之後, 變的相當緩慢

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/03/26 10:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《Mewra ()》之銘言: : 有一個程式, 原本是希望能邊讓畫面上的物件邊走邊聽到語音, : 但是以下的程式一執行起來, 整個畫面跟幾乎不能動一樣, 物件行動的極其緩慢, : 語音就更不用說了. 裡面用了最簡單的_beginthread(), 程式裡的兩個while是 : 必需的, 請問有辦法改善嗎? 謝謝 : bool repeat = true; : void keyboard( void* parm ) : { : mKeyboard->capture(); : if( mKeyboard->isKeyDown( A_DOWN ) ) : { : ..... : } : } : void sound( void* parm ) : { : while( repeat ) : { : mRoot->checkIncomingMsg(); : } : _endthread(); : } : int main() : { : while( 1 ) : { : _beginthread( keyboard, 0, NULL ); : _beginthread( sound, 0, NULL ); : } : return 0; : } 我猜你大概沒有想清楚你在做什麼. :) keyboard thread 只檢查一次 keyboard, 要是 down 就做某東西, 然後就完了 sound thread 要是 repeat turn on 了的話就不斷發聲, 然後 invoke _endthread main thread 不斷地生成 keyboard 和 sound thread 每處做的都是很不尋常的東西 正常做法會是這樣: keyboard thread: while (program running) { check keyboard and do your work; sleep for some time maybe; } sound thread: while (program running) { play your sound the way you want; sleep for some time maybe; } main thread: create keyboard thread create sound thread; // sleep? wait for keyboard thread to end; wait for sound thread to end; 不必無意義的瘋狂生成 thread. 通常 threading library 有類似 join() 之類的方法 來 "等候 thread 完成" 你的 main thread 要是沒有特別工作的, 不妨乾脆把 keyboard thread 做的東西放回到 main thread 做吧. main thread 處理 keyboard input, 另生成一個 thread 做播放聲音 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82
文章代碼(AID): #19okqZcW (C_and_CPP)
文章代碼(AID): #19okqZcW (C_and_CPP)