0

別のスレッドで wxWidget の共通ダイアログを実行する場合、オブジェクトはありますか? 私はブラウザ プラグインを開発しているので、長い操作をメインのブラウザ スレッドの外に置く必要があります。

私は小さなテストを行い、動作しているように見えますが、警告が表示されます:

....\src\msw\dirdlg.cpp(333): 'CoCreateInstance(CLSID_FileOpenDialog)' がエラー 0x800401f0 で失敗しました (coInitialize が呼び出されていません)。

wxApp::Initialize(...) またはその他の関数を呼び出さなければならないということですか?

ありがとう、クリスチャン

4

2 に答える 2

1

COMを使用している各スレッドでCoInitialize()を呼び出す必要があります。したがって、共通のダイアログオブジェクトを作成する前に、CoInitialize()(スレッドごとに1つ)を呼び出し、スレッドの最後にCoUninitialize()を呼び出します。

メインスレッドの場合、wxWidgetsはこれを内部的に行います。他のスレッドの場合、これらの関数を手動で呼び出す必要があります。通常、GUIとは関係ありませんが、wxWidgetsが内部で使用するCOMオブジェクトと関係があります。

于 2012-09-24T00:06:01.630 に答える
1

はい、「反論」があります

マルチスレッド アプリケーションに関する重要な注意事項

マルチスレッド アプリケーションを作成する場合、セカンダリ スレッドで GUI 関数を呼び出さないことを強くお勧めします。

http://docs.wxwidgets.org/trunk/overview_thread.html

于 2012-09-24T13:01:30.103 に答える