こんにちは。
無限ループにて、送信側から送信されるパケットを受信しパケット数をカウントしています。
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で割ってあまりが出るためうまく取得できません。
なにか方法はありますでしょうか?
よろしくお願い致します。
スレッドは常に処理されているわけではない (他プロセス/スレッドが処理されてる) ので
==1000 になるまさにその瞬間に処理がこなけりゃ検出不可能になっちゃうよ。
差を取って >=1000 ではダメなの?
典型的なダメコードを提示しておこう。
49日問題を発生させないためにはどうすればよいか考えて味噌
detect_interval=start+1000;
for (...) {
if (timeGetTime()>detect_interval) {
printf(...);
detect_interval+=1000;
}
}
受信するパケット毎に受信日時のようなデータを対で保持して
溜まったデータを後から分類してはどうでしょう?
WinPcap とか使って受信イベントでパケット数カウントした方が
安全ではないでしょうか。
http://codezine.jp/a/article.aspx?aid=126
参考までに・・・
以上。
ツイート | ![]() |