• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:結果待ちの関数を強制終了)

結果待ちの関数を強制終了する方法とは?

このQ&Aのポイント
  • 結果待ちで処理が止まっている場合、その結果待ちの部分を結果はどうでもいいから、もう結果を待たないというふうにさせる方法を教えてください。
  • 例えば、MessageBox関数を使った場合、5秒以内にクリックさせなかったら、MessageBoxの返り値を適当に決める方法を教えてください。
  • たぶんそれをすると、メッセAとメッセBは別プロシージャとか別関数に分かれて書くことになると思うけど、それでもいいんです。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

APIで DWORD WaitForMultipleObjects( DWORD cObjects, //チェックするオブジェクトの数 LPHANDLE lpHandles, //オブジェクトハンドルの配列のアドレス BOOL bWaitAll, //1つかすべてかのフラグ DWORD dwTimeOut //タイムアウト時間 ) というのがあります。 CreateEventでイベントを設定しておき、イベントがオンになったタイミングまで待ちます。 またタイムアウト時間をミリ秒単位で設定できます。 たとえば5000と設定しておいた場合は 5秒間イベントが発生しなかったときにも 待ちが解除されるという具合です。 MessageBox以外でも自分の好きなタイミングで処理を実行できます。 ただマルチスレッドにする必要があります。 イベントが一つだけでこと足りる場合はWaitForSingleObjectというのもあります。

A__
質問者

お礼

WaitForMultipleObjects()のタイマーで解決しました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

MessageBoxであるならば、次の方法で実現可能です。 1.メインに処理を行うウィンドウとは別に、不可視のウィンドウを作成しておく。 2.メインのウィンドウでメッセージボックスを表示するときに、不可視のウィンドウでタイマーを開始する。 3.時間がたったらメッセージボックスを閉じる処理を実行する。 というような感じですかね? ちなみに、メッセージボックスを閉じるには、メッセージボックスのウィンドウハンドルを取得しておく必要があります。もしくはkeybd_eventでキーストロークを送るかですかね?

関連するQ&A

専門家に質問してみよう