マルチスレッドでもっとも危険な行為がデッドロック。

スレッドAとスレッドBがあってAがBの終了を待っている時にBがAの終了を待つ。
こうすると永遠に終わらないよね。
こんな関係のことをデッドロックと言う。

よくあるケース1
メインスレッドがWaitForSingleObjectで待っている時にサブスレッドがSendMessageを呼ぶとデッドロックに陥る。
これはSendMessageは処理が完了するまで制御を戻さないから。回避するにはPostMessageを使う。