一定時間隔ごとにパケット数を取得する方法について


digital  2006-12-02 00:07:02  No: 63787

こんにちは。
無限ループにて、送信側から送信されるパケットを受信しパケット数をカウントしています。

while(1)
{
recvfrom()
count++;
}

一定間隔(例えば、1秒間隔)で受信したパケット数を取得したいと思っています。

そこで、timeGetTimeを利用し、

int start,stop;
int count=0;
start = timeGetTime();

while(1)
{
recvfrom();
count++;

if((stop=timeGetTime-start)%1000==0){
printf("%d\t%d\n",stop,count);
}
}

と記述して取得しようと試みていますが、stopが1000になるわけではなく、1112や3422など1000で割ってあまりが出るためうまく取得できません。

なにか方法はありますでしょうか?

よろしくお願い致します。


tetrapod  2006-12-02 00:51:15  No: 63788

スレッドは常に処理されているわけではない (他プロセス/スレッドが処理されてる) ので
==1000 になるまさにその瞬間に処理がこなけりゃ検出不可能になっちゃうよ。
差を取って >=1000 ではダメなの?

典型的なダメコードを提示しておこう。
49日問題を発生させないためにはどうすればよいか考えて味噌

detect_interval=start+1000;
for (...) {
  if (timeGetTime()>detect_interval) {
    printf(...);
    detect_interval+=1000;
  }
}


キー  2006-12-02 02:45:53  No: 63789

受信するパケット毎に受信日時のようなデータを対で保持して
溜まったデータを後から分類してはどうでしょう?


オショウ  2006-12-02 21:12:16  No: 63790

WinPcap とか使って受信イベントでパケット数カウントした方が
安全ではないでしょうか。

http://codezine.jp/a/article.aspx?aid=126

参考までに・・・

以上。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加