解决通信计时问题(C++ windows 应用程序)

Posted

技术标签:

【中文标题】解决通信计时问题(C++ windows 应用程序)【英文标题】:Troubleshoot communication timing issues (C++ windows app) 【发布时间】:2011-05-10 19:04:16 【问题描述】:

我有一个与嵌入式设备通信的“旧版”(为我们解决此问题)应用程序 - 它由外部 OEM 应用程序驱动,该应用程序使用此“应用程序”刷新汽车的电子控制单元 (ECU) -> 通信通过 USB 端口连接到汽车 ECU -> 一些通过设备 -> 汽车 ECU。

那里似乎存在一些时间问题(呼叫/响应通常不能超过 100 毫秒),我想知道你建议什么来衡量这一切。我在想这类问题的记录器当然会有所帮助,但据我了解/看到,还涉及很多线程和可能的同步。当然,线程可能会带来一些问题。有没有办法让我对与线程/同步相关的时间有一个“整体”的看法?例如,如果线程存在一些同步问题,那么探查器(对数据进行采样)是否可以告诉我等待/同步所涉及的时间?我使用 Visual Studio 2008,但我认为如果有更多帮助,我也可以使用 VS 2010。

您是否为此推荐 Visual Studio Profiler(需要团队版?)还是有其他东西(可能也是免费的)? 谢谢

-吉塔

【问题讨论】:

你能在调试器下运行代码吗? Then you could try this. 100 毫秒是一个巨大的时间......我认为你正在追逐一些大事,只是在有趣的地方放置一些日志应该足以找出问题所在...... 6502,通过记录我也打算解决这个问题。完成了内存记录器(仅在“分析”/程序结束时刷新信息)。希望它也能帮助我理解代码以检测热点。 【参考方案1】:

这个问题已经有一段时间了。对此的解决方案是:“完成一个内存记录器(仅在“分析”/程序结束时刷新信息)。” 回顾过去,这已经足够好,但现在 Windows 上注重性能的方法是使用 Windows 事件跟踪 (ETW),因为这将日志记录提供程序与事件跟踪信息的使用者分离,甚至导致日志记录崩溃应用程序不会影响日志记录(直到实际崩溃产生的点)。它还具有其他性能优势,据说它能够处理生产者应用程序生成的数千个事件,而不会出现明显的性能下降。

【讨论】:

以上是关于解决通信计时问题(C++ windows 应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt 的 C++ 中的线程串行端口通信

在 Windows 中创建 C++ 非阻塞计时器

C++两种计时方式(windows平台,毫秒级&微秒级)

C++ 中的计时器

关于c++中socket通信的问题望大神来给解决下

C++ 库boost里使用定时器计时