看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
lc85301:我應該會開thread然後用shared memory傳字元 07/17 17:03
Weiyuc:一但用到shared variable, 就要小心同步問題 07/18 00:01
Weiyuc:race condtion 都是在最不可預測時發生的 07/18 00:02
xxxx9659:關鍵字 conio.h kbhit() getch() 07/20 17:27
xxxx9659:沒事 看錯.. 不要理我.... 07/20 17:29