在C ++中,有了linux api,有没有办法在时间t过去后发生事件?

时间:2010-12-25 01:19:25

标签: c++ linux multithreading timer

到目前为止,我一直在这个项目中使用linux api和boost库,所以理想情况下我想坚持这些。

我试图找出服务器在一秒钟内发送的字节数。我的计划是只有一个变量,它会每次重置我将send()函数的返回值附加到每次发送时(返回值是发送的字节数)。

问题是:我怎么知道何时停止追加变量?我想要一些类型的中断事件,它会告诉我“嘿,它已经是第二个!记录发送的字节并重置变量然后再次附加它!”我已经有一个epoll设置,所以如果我可以添加一些类型的文件描述符,我会用epoll进行轮询,这将是理想的!

感谢任何建议/建议。提前谢谢!

P.S:我的想法是拥有一个计时器线程。它会休眠一秒钟然后当它唤醒时它会写入消息队列。由于消息队列可以通过epoll进行轮询,我会得到事件并知道。睡眠线程将继续循环。有更好的想法吗?

3 个答案:

答案 0 :(得分:3)

设置SIGALRM处理程序以终止测量,然后以秒为单位调用alarm(2)

答案 1 :(得分:1)

如果你使用boost,那么你可能应该使用boost :: asio来实现异步IO。它将您需要的大部分内容包装到与平台无关的界面中。它包含timer和timer has expires_at()。

答案 2 :(得分:0)

由于gettimeofday具有高达微秒的精度,您可以使用它在每次发送后获取时间戳并计算您的即时速度。此外,人们可以聚合大约一秒的字节数(根本不需要精确),将字节数除以实际经过的微秒数,并将其发送给感兴趣的订阅者。< / p>