2

自分の oun ASSERT/VERIFY メッセージ ボックスを作成したいと考えています。だから私は使用します:

int _CrtSetReportHook(int reportType, char * message, int * returnValue)

フック自体は次のとおりです。

int MyReportHook(int reportType, char * message, int * returnValue)
{
    ...
    QDialog assertDlg;
    ...
    assertDlg.exec();
}

動作しますが、ペイント イベント (通常は他のトレッド) で ASSERT を実行すると、クラッシュします。だから...どうすればこの問題を解決できますか?

EDIT 通常、paintEvent(QPaintEvent * event) の実行中に QDialog::exec() を呼び出したいと思います。したがって、QApplication 全体の再描画 (および確実に他のシグナルの処理) を呼び出さないようにする必要があります。

4

1 に答える 1

2

簡単な答えは、できません。任意のスレッドから機能する 2 つのソリューションがあります。

  1. メッセージ ボックスのwinapiを使用します。

  2. GUI スレッドに存在する QObject にシグナルを送信します。このシグナルは GUI スレッドで受信され、ユーザーと対話できます。戻り値が気になる場合は、同期オブジェクトを使用して、GUI スレッドがメッセージ ボックスが処理され、戻り値が使用可能であることを示すのを待つことができます。

于 2013-08-26T16:35:17.150 に答える