アクションゲーム製作総合スレッド Part1at GAMEDEVアクションゲーム製作総合スレッド Part1 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト321:名前は開発中のものです。 05/01/18 08:01:45 bnzqLo0Q そうなのか。俺は while(1) { if(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {// メッセージがあるか調べる if(!::GetMessage(&msg, NULL, 0, 0)) {// メッセージがとれない break; } ::TranslateMessage(&msg); ::DispatchMessage(&msg); } else// メッセージがないのなら独自の処理を { ::MsgWaitForMultipleObjects(0, NULL, FALSE, (ゲーム処理にかかった時間から適切な止める時間), QS_ALLINPUT); ゲームアップデート(); } } ってのがデフォだと思ってた_| ̄|○ 322:名前は開発中のものです。 05/01/18 19:06:23 X88J3aOH 私は次のように解釈しています。 1) PeekMessage() だけでメッセージ(メイン)ループ → CPU 使用率 100% → 消費電力、発熱、Windows アプリとしての行儀の悪さが気になる。 2) フレーム毎に Sleep(0) を挿入する → プロセスの CPU 占有は解消できる。 → システムは依然として CPU 100% を示す。過剰発熱は続く。 3) フレーム毎に Sleep(n) を挿入する → 余剰時間を待機する。CPU を解放できる。 → ただし Sleep 中はメッセージループが滞ってしまう。やはり行儀が悪い。 4) そこでマルチスレッド。 メッセージループとメインループのスレッドを分ける。 ここで PeekMessage() すると (1) に戻ってしまうので GetMessage() を使う。 メインループは Sleep(n) などで fps を調節する。 ただ、ttp://homepage1.nifty.com/bee/tk/timer.html には 「GetMessage() はスレッドを停止しない」とあります。 PeekMessage() + WaitMessage() で代替すべきなのかも。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch