Re: [問題] 加入thread之後, 變的相當緩慢
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章