c++ - 在不手动创建线程的情况下定期调用 C 函数

标签 c++ c windows linux timer

我已经在 C++ 中实现了一个 WebSocket 处理程序,我需要偶尔发送一次 ping 消息。但是,我不想为每个套接字启动一个线程/一个只调用 ping 函数的全局轮询​​线程,而是使用一些操作系统功能来调用我的计时器函数。在 Windows 上,有 SetTimer,但它需要一个有效的消息循环(我没有。)在 Linux 上有 timer_create,它看起来更好。

是否有一些可移植的、低开销的方法来定期调用函数,最好是使用一些自定义上下文? IE。像 settimer (const int millisecond, const void* context, void (*callback)(const void*))?

[编辑] 只是为了更清楚一点:我不想管理额外的线程。在 Windows 上,我想在系统线程池上使用 CreateThreadpoolTimer 可以解决问题,但我很想知道是否有更简单的解决方案以及如何将其移植到 Linux。

最佳答案

如果你打算跨平台,我建议你使用像libevent这样的跨平台事件库。 .

libev较新,但目前对 Win32 的支持较弱。

关于c++ - 在不手动创建线程的情况下定期调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127602/

相关文章:

c++ - undefined reference (SFML)

c++ - 如何在Vista和7中全局静音和取消静音,并获得静音状态?

c++ - 数组中的元素无意中不断变化

c - 如何传递指针在堆上创建二维数组?

windows - 为什么我的 Perl 程序不能在 Windows 上创建超过 4 GB 的文件?

c++ - 运算符(operator)表现|与运营商+

c - 当对 c 中的不同输入数据类型使用相同的函数时,是否可以在被调用函数中检索参数的数据类型?

c++ - 可以为实体生成 8 字节的唯一 ID

windows - 是否有一种简单的方法可以强制Windows使用固定的DPI值而不是当前DPI设置来计算文本范围?

windows - 为什么中断 0x2A 在 x64 中不起作用?