由于在C ++中使用了异步IO,因此可以通过其他方式延迟我的程序而不休眠。

Zeke Gunnink

我有一个关于除了睡眠以外延迟C ++程序的替代方法的问题。

我的程序中有一部分可以接收UDP数据包并将其发送到控制器。程序的这一部分必须异步运行。为了减少此提供程序的开销,我决定使用异步IO来接收UDP数据包,而不是使用单独的线程监视套接字。

我遵循了举动的示例来完成此任务。我注意到,如果在此活动处于活动状态时尝试使用usleep,则每当收到数据包时,它都会中断我的睡眠。之所以这样说是有道理的,因为我认为该触发是由CPU上的某种中断触发的,这可能会阻止CPU进入睡眠状态。如果有人能很好地解释为什么会发生这种情况,我很想知道。我的问题是,有时候我必须连续发送几个数据包,并且需要确保延迟它们,否则它们将被我的控制器遗漏。

我通常会用睡眠来延迟数据包的发送,但是现在我不能,因为它被我的签名破坏了。我曾考虑过可能要使用繁忙的等待时间,但这可能太不一致了。我也可能会使用一个使用计时器定期清空的数据包队列,但是似乎有一个更简单的解决方案。

除了睡眠以外,还有其他方法可以延迟发送数据包吗?有没有一种方法可以设置我的异步IO,这样就不会破坏睡眠状态?我会以错误的方式处理吗?

十六进制

通常,在编写异步程序时,您会切换到事件循环风格的编程。任何事件系统都将使您能够设置触发回调的计时器,并使用这些计时器可以设置发送流量和诸如此类的时间表。另外,您通常使用它们来监视套接字,并在需要读取内容时简单地调用回调。虽然对于UDP并不重要,但是如果您随时都在处理TCP,那么您还想在准备好将套接字写入套接字时使用它们来调用回调,这样一来,您就不会在尝试写出数据时阻塞进程。

我个人喜欢http://libevent.org/,尽管我也听说过libev的好处。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

由于看似无关的数组,C ++程序崩溃

来自分类Dev

C#程序由于功能变慢

来自分类Dev

由于函数被调用而停止运行的 C 程序?

来自分类Dev

C / C ++优化编译器由于使用模板而损坏

来自分类Dev

由于C中的strcmp和strcpy而导致的程序错误

来自分类Dev

C ++程序由于某些未知原因而崩溃

来自分类Dev

由于C的限制,Postgres是否使用内存上下文?

来自分类Dev

由于其定义无效,因此无法重新绑定Cx C以使用haskell模式特定功能

来自分类Dev

错误:由于保护级别为C#,因此无法访问Car.Form1。

来自分类Dev

由于Swift中没有preprocressor,因此什么替代了C宏?

来自分类Dev

由于当前线程处于堆栈溢出状态,因此无法求值表达式。(C#)

来自分类Dev

错误:由于保护级别为C#,因此无法访问Car.Form1。

来自分类Dev

由于“使用”另一个DLL,C#DLL程序集加载失败

来自分类Dev

除了使用访客模式之外,还有没有其他方法可以在C#中使用变体?

来自分类Dev

由于我使用大量内存,导致分段错误(核心已转储)C ++

来自分类Dev

由于C ++ Qt多线程应用程序中删除指针而导致崩溃

来自分类Dev

由于流程,C#应用程序保持打开状态

来自分类Dev

Objective-C问题:由于未捕获的异常“ NSUnknownKeyException”而终止应用程序

来自分类Dev

由于不相关的空printf语句,C程序输出已完全更改

来自分类Dev

由于 C# 中的几个大内存字典对象导致应用程序性能下降

来自分类Dev

我的C ++ glm :: vec3数组由于某种原因似乎重置为null

来自分类Dev

如何抑制由于使用不推荐使用的ODBC API方法而引起的警告c4996

来自分类Dev

C#-通过Gmail或其他方式发送电子邮件?

来自分类Dev

由于编译错误,C ++ std :: set无法在迭代器上使用运算符+

来自分类Dev

由于文件阻止设置,使用C#打开Word文档(.doc)导致COMException

来自分类Dev

由于使用typedef或标头,导致C““结构”之前的预期表达式”错误

来自分类Dev

由于在Bjarne Stroustrup“使用c ++进行编程和实践”中找不到符号,导致链接错误

来自分类Dev

由于版本原因,无法使用WooCommerceNET C#连接到Woocommerce

来自分类Dev

由于文件阻止设置,使用C#打开Word文档(.doc)会导致COMException

Related 相关文章

  1. 1

    由于看似无关的数组,C ++程序崩溃

  2. 2

    C#程序由于功能变慢

  3. 3

    由于函数被调用而停止运行的 C 程序?

  4. 4

    C / C ++优化编译器由于使用模板而损坏

  5. 5

    由于C中的strcmp和strcpy而导致的程序错误

  6. 6

    C ++程序由于某些未知原因而崩溃

  7. 7

    由于C的限制,Postgres是否使用内存上下文?

  8. 8

    由于其定义无效,因此无法重新绑定Cx C以使用haskell模式特定功能

  9. 9

    错误:由于保护级别为C#,因此无法访问Car.Form1。

  10. 10

    由于Swift中没有preprocressor,因此什么替代了C宏?

  11. 11

    由于当前线程处于堆栈溢出状态,因此无法求值表达式。(C#)

  12. 12

    错误:由于保护级别为C#,因此无法访问Car.Form1。

  13. 13

    由于“使用”另一个DLL,C#DLL程序集加载失败

  14. 14

    除了使用访客模式之外,还有没有其他方法可以在C#中使用变体?

  15. 15

    由于我使用大量内存,导致分段错误(核心已转储)C ++

  16. 16

    由于C ++ Qt多线程应用程序中删除指针而导致崩溃

  17. 17

    由于流程,C#应用程序保持打开状态

  18. 18

    Objective-C问题:由于未捕获的异常“ NSUnknownKeyException”而终止应用程序

  19. 19

    由于不相关的空printf语句,C程序输出已完全更改

  20. 20

    由于 C# 中的几个大内存字典对象导致应用程序性能下降

  21. 21

    我的C ++ glm :: vec3数组由于某种原因似乎重置为null

  22. 22

    如何抑制由于使用不推荐使用的ODBC API方法而引起的警告c4996

  23. 23

    C#-通过Gmail或其他方式发送电子邮件?

  24. 24

    由于编译错误,C ++ std :: set无法在迭代器上使用运算符+

  25. 25

    由于文件阻止设置,使用C#打开Word文档(.doc)导致COMException

  26. 26

    由于使用typedef或标头,导致C““结构”之前的预期表达式”错误

  27. 27

    由于在Bjarne Stroustrup“使用c ++进行编程和实践”中找不到符号,导致链接错误

  28. 28

    由于版本原因,无法使用WooCommerceNET C#连接到Woocommerce

  29. 29

    由于文件阻止设置,使用C#打开Word文档(.doc)会导致COMException

热门标签

归档