再描画要求
Posted: 2006年9月26日(火) 16:01
ゲームみたいなものを作っていて、最近開発環境を変えたのですが、ウィンドウメッセージを受け取るスレッドと別にゲームメインスレッドをつくっていたのですが、GDI関係で困ってしまいました。
メインスレッドで
InvalidateRect()
を使って画面の再描画要求をした後にTextOutやRectangleでaDC(デバイスコンテキストハンドル)に絵画しようとしたときに
ウィンドウメッセージスレッドは、RADツールの
Sub MainWnd_Paint(hDC As DWord)
BitBlt(hDC,0,0,MX,MY,aDC,0,0,SRCCOPY)
End Sub
(MX:MYはウィンドウの幅と高さです。)
を実行中で、メインスレッドのTextOutなどに渡したaDCが「無効なハンドル」とされて
TextOutされないという現象が発生しました。
前の開発環境(WinXP SP2 Intel Celeron M 1.0GHz AB 5.0CP3)ではそういうことはなく、今の開発環境(WinXP SP2 Intel Pentinum 4 2.93GHz AB CP3)で起こるようになって大変困っています。
対策としてはスレッドの優先度を変えたり、TextOutの前にSleepをつけたりとしたんですが、この現象を完全に防ぐことができませんでした。
ネットで3日調べてもわかりませんでした。
わかりにくい質問かもしれませんが、どなたかご教授おねがいします。
メインスレッドで
InvalidateRect()
を使って画面の再描画要求をした後にTextOutやRectangleでaDC(デバイスコンテキストハンドル)に絵画しようとしたときに
ウィンドウメッセージスレッドは、RADツールの
Sub MainWnd_Paint(hDC As DWord)
BitBlt(hDC,0,0,MX,MY,aDC,0,0,SRCCOPY)
End Sub
(MX:MYはウィンドウの幅と高さです。)
を実行中で、メインスレッドのTextOutなどに渡したaDCが「無効なハンドル」とされて
TextOutされないという現象が発生しました。
前の開発環境(WinXP SP2 Intel Celeron M 1.0GHz AB 5.0CP3)ではそういうことはなく、今の開発環境(WinXP SP2 Intel Pentinum 4 2.93GHz AB CP3)で起こるようになって大変困っています。
対策としてはスレッドの優先度を変えたり、TextOutの前にSleepをつけたりとしたんですが、この現象を完全に防ぐことができませんでした。
ネットで3日調べてもわかりませんでした。
わかりにくい質問かもしれませんが、どなたかご教授おねがいします。