掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ShellExecuteで呼び出したcplファイルを速やかに終了させるには? (ID:68993)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
解決済み後の回答なので、これに対する返信は特に要らない。 > 待機に時間がかかる原因はわかりませんが、 恐らく inetcpl.cpl が(更新されて)終了時、オーナーウィンドウに SendMessageTimeout() 辺りを使ってメッセージを投げていると予想。 ただ、どらさんが最初に出しているソースだと WaitForSingleObject() で (メッセージを処理する機会が無いまま)待機してしまっているので デッドロックに陥っている、という辺りかと。 > どの様に指定すればよいのか見当もつかず・・・ > おそらく、この関数をきちんと理解していないのだと思います>_< > 申し訳ありませんが、ご存じであればヒントだけでもいただけないですか? -------- // WaitForSingleObject(l_sei.hProcess, INFINITE); for (;;) { const DWORD ret = MsgWaitForMultipleObjects(1, &l_sei.hProcess, FALSE, INFINITE, QS_SENDMESSAGE); if (ret == WAIT_OBJECT_0) { break; } else if (ret == (WAIT_OBJECT_0 + 1)) { MSG msg; while (::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { if (処理したいメッセージなら) { TranslateMessage(&msg); DispatchMessage(&msg); } } } } -------- 上記では SendMessage 系でメッセージが来た場合のみメッセージループにまわしている。 ちなみに、ウィンドウ(メッセージループ)を持つスレッドでは、基本 WaitForSingleObject() より MsgWaitForMultipleObjects() を使うべきだと俺は思ってる。 提示ソースで云うと、WaitForSingleObject() で待っているため hDlg の画面再描画を 処理できず hDlg の表示がメチャ2になるが、MsgWaitForMultipleObjects() + QS_PAINT で 待つようにすれば必要に応じて hDlg の表示を更新できる。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.