お世話になります。
ソケット通信プログラムで以下の用に受信メッセージで処理を書いているのですが
case FD_READ: //メッセージ受信
{
char buf[MAX_MESSAGE]; //受信バッファ
int iRnum; //受信データ数(単位バイト)
iRnum = recv(sock, buf, MAX_MESSAGE, 0);
MessageBox(hWnd,szWRlog,szT,MB_OK|MB_ICONEXCLAMATION);
if(iRnum>RECV)
{
MessageBox(hWnd,szErlog,szT,MB_OK|MB_ICONEXCLAMATION);
}
***** 処理つづく ****
}
return 0L;
途中に入れた MessageBoxの実行に必ず遅延が生じます。
右上の[×]終了ボタンを押すとまとめて表示されたりするのですが
デバッグモードでトレースするとちゃんとその場で表示されます。
なぜなのでしょうか?
原因や回避する方法をご存知の方いらっしゃいましたらお願いします。
とりあえず……
MessageBox()実行中は(そのスレッドの)処理が止まっていますが、
その辺は問題ないのでしょうか?
瀬戸っぷさん
コメントありがとうございます。
3回受信して,終了ボタンを押すと3つのMessageBox()がズラズラッと一度に表示されて
OK OK OKとそれぞれのOKボタンを押すとプログラムが終了すると言った具合なのです。
> 3回受信して,終了ボタンを押すと3つのMessageBox()がズラズラッと一度に表示されて
> OK OK OKとそれぞれのOKボタンを押すとプログラムが終了すると言った具合なのです。
ちょっと状況が判りませんが……
可能性の1つとしてメッセージボックスがメインウィンドウの裏に隠れているというコトはないですか?
Alt+TABなどで切り替えると前面に出てくるかもしれません。
いずれにしろ……
> char buf[MAX_MESSAGE]; //受信バッファ
> int iRnum; //受信データ数(単位バイト)
> iRnum = recv(sock, buf, MAX_MESSAGE, 0);
>
> MessageBox(hWnd,szWRlog,szT,MB_OK|MB_ICONEXCLAMATION); /* 1 */
>
> if(iRnum>RECV)
> {
> MessageBox(hWnd,szErlog,szT,MB_OK|MB_ICONEXCLAMATION);
> }
1のところのMessageBox()でOKボタンを押さないと、それ以降の処理は進まないと思うのですが…
MessageBox()でなく、TRACE()やOutputDebugString()を使うというのは無理なんでしょうか?
デバッグ用途でしたらそちらの方がいいかと思われますが。
瀬戸っぷさん
重ね重ね コメントありがとうございます。
>可能性の1つとしてメッセージボックスがメインウィンドウの裏に隠れているというコトはないですか?
>Alt+TABなどで切り替えると前面に出てくるかもしれません。
↑なんと瀬戸っぷさんがご指摘のとおりでした。 (滝汗);;
最後に一気に出ていると思っていたのは間違いで裏にその都度表示されていたようです。 m(__)m
私もこのプログラムは MessageBoxで制御が止まると思っていたのですが,送信する度に,受信はしていたので通過したとばかり思っていましたがその都度,MessageBoxで止まっていたようです。
なぜ,裏にMessageBoxが出るのかは不明です。
瀬戸っぷさん ありがとうございました m(__)m
解決です
編集 削除