【发布时间】:2021-07-28 23:01:12
【问题描述】:
我的应用程序最初是 VS2019 中的 c++ 控制台应用程序。代码作为 SDK 的一部分提供。工作完美。来自制造商 USB 设备的良好响应。后来,我想毕业的是一个GUI应用程序,就像我在VB和c#中所做的一样。瞧,我设法在 Qt 和 Win32 中重建了应用程序,但我遇到了应用程序变得无响应并且我无法知道发生了什么的情况。
在控制台应用程序中,我必须在发送“TakeMeasurement”命令后执行此代码以与设备交互:
if (SDK_SUCCESSFUL(sdkError)) {
printf("\nWaiting for measurement to complete...\n");
while (!isMeasureWait) {
if (isDisConnect) break;
this_thread::sleep_for(chrono::milliseconds(1000));
}
}
这段代码就像一个魅力!经过一两次迭代,设备完成了测量,我可以轻松获取数据。
在 Win32 方面,我使用完全相同的代码。只是,一旦控制进入循环,它就永远不会返回。
知道如何诊断错误吗?我的印象是,从启动测量命令的确切时刻到仪器发出完成信号的确切时刻,以及准备好获取数据之间,“时间”是至关重要的。
我天真的假设是,在两个“平台”上的调试模式下,我一定会得到一些时间差异?遗憾的是,我无法从制造商那里获得更多这方面的信息,但我怀疑我有一小段时间可以对仪器的响应采取行动?我开始怀疑,在 Win32 上,那个“时间”太长了?与控制台端相比?
我在想,也许,“测量”那个时间,以毫秒为单位?首先,在控制台端,看看什么样的延迟“有效”,然后,看看延迟与 Win32 端相比如何。
我可能是在浪费我的时间,我当然不是想浪费你的时间。
我将如何了解 C++ 应用程序中经过的时间?我去看看VS2019,他们有各种在运行时弹出的“性能”东西?
感谢任何帮助。
【问题讨论】:
-
什么代码修改了布尔值?看起来你正在轮询,可能每轮等待 1s 太长了...
-
但是每回合中的 1 在控制台端“工作”没有问题?当从设备 DLL 调用 TakeMeasurement 命令时,设备应该执行它的工作并控制跳转到我在应用程序开始时初始化的设备处理程序。
-
FWIW 我测量了 TakeMeasurement 命令和数据返回之间经过的时间,即 1203 毫秒。
-
isMeasureWait是如何声明的? -
@RichardCritten isMeasureWait 在全局范围内声明为布尔值。仅在收到设备响应后,它才会在 DeviceHandler 函数中更改。
标签: c++ multithreading console win32-process