VC++でゲーム開発をしています。
基本的には「デバッグなしで開始」を選択して動作確認しているのですが、たまに間違って「デバッグの開始」を選択してしまうとフリーズしてしまいます。OSごとフリーズするのでアプリケーションの強制終了もできず、pcの電源を落とすしかありません。おそらくゲームループ(ShowWindow()でした)によるものだと思います。これを防ぐ方法、あるいはフリーズ時の対処法はありますか?気を付けるしかないのでしょうか。
追記:以下のコードで「デバッグの開始」をすると必ずフリーズします。ShowWindow(hwnd, SW_SHOW);をコメントアウトするとフリーズせず正常にデバッグが開始できました。正常な環境であれば以下のコードでフリーズは起こらないのでしょうか?それとも、そもそもこのコード自体にどこかおかしい点がありますか?
c++
1#include <Windows.h> 2#include <tchar.h> 3 4LRESULT WindowProcedure(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { 5 if (msg == WM_DESTROY) { 6 PostQuitMessage(0); 7 return 0; 8 } 9 return DefWindowProcW(hwnd, msg, wparam, lparam); 10} 11 12int main() 13{ 14 //create window 15 HWND hwnd = nullptr; 16 WNDCLASSEX wc = {}; 17 HINSTANCE hInstance = GetModuleHandle(nullptr); 18 wc.cbSize = sizeof(WNDCLASSEX); 19 wc.lpfnWndProc = (WNDPROC)WindowProcedure; 20 wc.lpszClassName = _T("2Dgame"); 21 wc.hInstance = GetModuleHandle(nullptr); 22 RegisterClassEx(&wc); 23 RECT wrect = { 0,0,1280,720 }; 24 AdjustWindowRect(&wrect, WS_OVERLAPPEDWINDOW, false); 25 hwnd = CreateWindow( 26 wc.lpszClassName, 27 _T("game window"), 28 WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, 29 CW_USEDEFAULT, 30 CW_USEDEFAULT, 31 wrect.right - wrect.left, 32 wrect.bottom - wrect.top, 33 nullptr, 34 nullptr, 35 wc.hInstance, 36 nullptr 37 ); 38 ShowWindow(hwnd, SW_SHOW); 39 40 //loop 41 MSG msg = {}; 42 while (true) 43 { 44 if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { 45 if (msg.message == WM_QUIT) { 46 break; 47 } 48 TranslateMessage(&msg); 49 DispatchMessage(&msg); 50 } 51 else { 52 //game processing 53 } 54 } 55}
あなたの回答
tips
プレビュー