none
BitBlt(),StretchBlt()の描画終了について RRS feed

  • 質問

  • BitBlt(),StretchBlt()ですが、実際のモニタ上で線画が終了したことを知る手段ってあるのでしょうか。

    画面表示が遅れてしまい、内部の処理と一致しない状況が発生していたり、画面描画しない(モニタに表示されない)で処理が終了することがあり困っています。タイマで待つ以外に確実に描画終了を確認する手段ってあるのでしょうか。
    • 編集済み mfujikawa 2019年7月9日 0:48
    2019年7月9日 0:42

回答

  • Windows GDIでは、

    (1)HDCに対して行われた描画命令はバッチキューに追加されます。
    (2)キューにエントリされた描画命令は順番に実行されます。
    (3)ただし、それを呼び出したスレッドが無くなった時には、キューに残存する命令は実行されません。

    なので、描画をスレッドで行っている場合で、そのスレッドを終了する場合には、
    キューに残った全ての命令を実行する様に指示しなければなりません。
    これには GdiFlush() を使用します。
    この関数が実行されると、キュー内の命令が全て実行されます。
    このあたりは、万全でしょうか。

    2019年7月9日 1:12

すべての返信

  • Windows GDIでは、

    (1)HDCに対して行われた描画命令はバッチキューに追加されます。
    (2)キューにエントリされた描画命令は順番に実行されます。
    (3)ただし、それを呼び出したスレッドが無くなった時には、キューに残存する命令は実行されません。

    なので、描画をスレッドで行っている場合で、そのスレッドを終了する場合には、
    キューに残った全ての命令を実行する様に指示しなければなりません。
    これには GdiFlush() を使用します。
    この関数が実行されると、キュー内の命令が全て実行されます。
    このあたりは、万全でしょうか。

    2019年7月9日 1:12
  • お返事ありがとうございます。
    趣味のニワカプログラマで勉強不足でして
    GdiFlush()自体存在知りませんでした。
    取り入れてみます。
    ありがとうございます。

    2019年7月9日 3:18