Re: [問題] 需同時等待指令與更新畫面 不知從何起手

看板C_and_CPP作者 (cwei)時間12年前 (2013/07/17 04:45), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《BlackZap (Zap)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : VC++ : 問題(Question): : 碰到需要同時等候鍵盤指令:目前使用_getch() : 畫面又必須不斷更新:像是 : while(1) { : system("cls"); : cout << ...... : } : 舉例來說像是畫面上有個 $ 符號再隨機上下左右移動 : 鍵盤輸入 @ 後 原本的符號替換成 @ 維持原本的運動模式 : 我的問題是 _getch()指令執行後程式會變得在等待輸入才會執行下個指令 : 該如何同時做到等待與更新 這個題目應該是要你熟悉一些OS相關的操作吧. 如果版主知道IPC怎麼用(message box, mail box等) 用thread或是fork另外一個process 即可.不過看起來教授是有建議用timer.這樣的話大概就是希望你做個Main loop, 用timer中斷去觸發偵測key 和更新螢幕.這做法也百百種 我的話大概會用eventflag 吧(如果你的OS支援的話) Timer1 = opentimer(Key_Timeout, Key_Flag_Callback, Mode = continuous); Timer2 = opentimer(Screen_Timeout, Screen_Flag_Callback, Mode =continuous); While(1){ Flag_result = Eventflag.Wait(OPTION_OR); switch(Flag_result){ case(0x01 << KEY_DETECTION) getch(); break; case(0x01 << UPDATE_SCREEN) cout<<......; break; } 在Key_Flag 和 Screen_flag 兩個callback function 就是set 相對應的Flag 就行 這樣while(1) loop 應該大部分的時間是卡在等 event flag.不會被排進scheduler 直到timer觸發 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.98.140

07/17 17:03, , 1F
我應該會開thread然後用shared memory傳字元
07/17 17:03, 1F

07/18 00:01, , 2F
一但用到shared variable, 就要小心同步問題
07/18 00:01, 2F

07/18 00:02, , 3F
race condtion 都是在最不可預測時發生的
07/18 00:02, 3F

07/20 17:27, , 4F
關鍵字 conio.h kbhit() getch()
07/20 17:27, 4F

07/20 17:29, , 5F
沒事 看錯.. 不要理我....
07/20 17:29, 5F
文章代碼(AID): #1HvY5DZN (C_and_CPP)
文章代碼(AID): #1HvY5DZN (C_and_CPP)