04/12/29 01:40:28
並行プログラミングでは、実際に動かしてみても正しいかどうかの判断がつかないから
試行錯誤なしで初めから論理的に正しいコードを書くのが重要になるんですよ。
wxのドキュメントは、posixないしwin32スレッドの知識があるのが前提で書かれているようですね。
URLリンク(www.opengroup.org)
こことか読めば、wxCondition::Wait()がsignalを得て関数から戻るときに、
mutexを再び獲得する、というのがわかると思う。
つまり
Thread::Entry(){
mutex->Lock();
while(!TestDestroy){
condition->Wait();
iroironakoto();
}
}
と書かなければいけない。
wxのドキュメントにもmustと書かれているとおり、mutexを獲得せずにwxCondition::Wait()を呼出すのは未定義の動作を引き起こします。
OnButton()の方のmutex lockは省略可能ですが。