12,964
回編集
(→作成手順) |
(→注意事項) |
||
108行目: | 108行目: | ||
<br><br> | <br><br> | ||
== | == 画面の更新 == | ||
UpdateData | ワーカースレッド内において、<code>UpdateData</code>関数等の画面を描画するような関数は実行することができない。<br> | ||
<br> | <br> | ||
AfxGetMainWnd | <code>AfxGetMainWnd</code>関数の戻り値は、m_pLoadXMLThread->m_pMainWndに渡したウィンドウである。<br> | ||
設定しない場合は<code>NULL</code>となり、また、ダイアログの<code>Create</code>関数も呼ぶことができない。<br> | |||
<br> | |||
そのため、ワーカースレッドの処理と同期して画面を更新する場合 (UpdateData(TRUE)をスレッドから同期して実行する場合) は、<br> | |||
以下に示すようにワーカースレッド内からメインウィンドウにメッセージを送信する。<br> | |||
メインウインドウは、メッセージを受信して任意の処理を行う。<br> | |||
<br> | <br> | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
// stdafx. | // stdafx.hファイル | ||
//------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||
126行目: | 128行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
// CFileView. | // CFileView.cppファイル | ||
// | // まず、ワーカースレッドからメイン処理にメッセージを送信する | ||
// 次に、メッセージを受信して任意の処理を行う | |||
BEGIN_MESSAGE_MAP(CFileView, CDockablePane) | BEGIN_MESSAGE_MAP(CFileView, CDockablePane) | ||
// UserMessage | // UserMessage | ||
140行目: | 143行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
// CFileView. | // CFileView.hファイル | ||
class CFileView | class CFileView | ||
150行目: | 153行目: | ||
<br> | <br> | ||
後は、SendMessage関数を受け取った側で処理を行えばよい。<br> | 後は、SendMessage関数を受け取った側で処理を行えばよい。<br> | ||
受信側では、UpdateData(TRUE)、および、UpdateData(FALSE)等を呼ぶことができる。<br> | |||
<br> | <br> | ||
<u>この時、スレッドの終了を待機するWaitForSingleObject関数を使用する場合、デッドロックになることに注意する。</u><br> | |||
スレッドの終了時に何らかの処理を行うのであれば、上記のようにスレッド終了時に"メッセージをメインウィンドウへ送信する"ことにより解決できる。<br> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:MFC]] | [[カテゴリ:MFC]] |