Re: [問題] 需同時等待指令與更新畫面 不知從何起手
※ 引述《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
07/17 17:03, 1F
→
07/18 00:01, , 2F
07/18 00:01, 2F
→
07/18 00:02, , 3F
07/18 00:02, 3F
推
07/20 17:27, , 4F
07/20 17:27, 4F
→
07/20 17:29, , 5F
07/20 17:29, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):