ネットワークプログラミング相談室 Port26
■ このスレッドは過去ログ倉庫に格納されています
0083デフォルトの名無しさん
2010/04/12(月) 18:30:12まず現象を説明します。
クライアントはWindowsのゲームアプリケーションで、2本スレッドが走っています。
片方は、連続的に映像を描画しています。
もう片方は通信を担当しており、ノンブロッキングモードのSOCKETを監視しています。
秒間60回程度「recv()を監視し、受信バイト数をデバッグウインドウに出力」するスレッドです。
サーバーからデータをsend()すると、クライアントのデバッグウインドウにすぐさま何バイト受け取ったかが表示されます。
(1回のrecvで受信しきれるとは限らないのはもちろんですが)
問題は「映像の描画」の負荷が重くなった時に起きます。
サーバーがsend()してから、受信されるまでの間隔が5秒〜20秒くらいとものすごく遅延するのです。
最初は、描画負荷によって、通信監視スレッドが止まってしまっているのかとも思いました。
ですがループ自体は軽快にまわっています。(0バイト受信というメッセージが、秒間60回吐かれ続けています)
質問は
・これは良くある現象であり、プログラムが間違っているわけではないのかどうか
・解決する方法はあるのか(一応映像の描画は、フレームスキップやらSleep(1)を毎ループ挟んだりやらしたのですが改善せず)
です。
アドバイスよろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています