thread

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_MFC_CWinThread.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt__beginthread.2c_._beginthreadex.asp

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200412/04120039.txt

MFCを使っているのにAfxBeginThreadとCWinThreadがまだよくわからないので_beginthreadexばっかり使っている…。

Multithreadなプログラムを書く場合、複数のthreadが同時に同じMemoryに対しての読み書きを行ってしまうと不味いわけだから、排他制御を行うなり予め絶縁性のようなものを確保するなりする必要が出てくる。

WorkerThreadで処理を行った結果をMainThreadで利用する場合、WorkerThread側ではQueueに対して登録を行い、MainThreadではTimerやEvent等でQueueに溜まっているデータを処理する、というのが非常に楽な感じがする。CopyをQueueに登録してしまうとメモリを無駄に消費してしまうのでshared_ptrとかを使う場合は、Queueからの取り出した後の処理のScopeも含めた排他制御を行う必要が出てくる。

良くない例としては、MainThreadがLockされている時に、WorkerThreadからMainThreadで管理されているWindowに対して処理を行ったりしていると、MessageLoopが止まっているのでプログラム全体が固まってしまう。まぁそんな流れにするのが悪いのだけれど…。

プログラムコードというのはある意味ロジックの塊なので、短い記述でも暗号にする事も出来るし、プログラムの規模が大きくなるにつれて依存性を管理限定する技術を使い、設計をして組んでいかないといけない。不注意な人がコーディングしたプログラムは、まるで地雷が埋まっている地獄甲子園のグラウンドのようになってしまうだろう…。