06/10/04 02:15:41
>>11
ソースを追ってみたが、wxSafeYieldは指定したウィンドウ以下を除いて
Disable状態にした後、wxYieldを呼んでいるだけだ。
2.6.3なんだが、wxYieldからwxTheApp->Yield()内では
MT-FIXMEなどとかいた、幼稚なバグが残っているから無理。
それと、Log関数もMT Safeでないのでむりなうえ、
wxMutexGuiLeaveOrEnterはMainThread以外からの呼び出しではAssertがおきるぞ。
>>10
とりあえず、Readの先のYield呼び出しのかしょをデバッガで追って、
wxThread::Yieldにちゃんといっているかどうか確認するほうが早いよ。
Yieldを呼んでいるのは大体、wxSocket*::Wait*で、GSocketの内部でも呼んでいるのかもしれない。
GSocket::ReadもStream(TCP)なら::recvを呼んでいるだけなので、問題はなさそうだが。
GSocket::Writeもにたようなものだった。
あときになるのは、イベントも全てメインスレッドから呼ばれるから、
OnSocketEventでReadするのはMainThreadじゃない?
それだと、Multi Threadになってても、
イベント処理に行くからスタックオーバーフローしてしまいそうだが。
イベントで拾ってくるならイベントが着たら受信用スレッドにconditionなりで
知らせて、Recvさせるようにするのはどう?