调试Win32应用程序c++; 我的应用程序开始作为VS2019中的C++控制台应用程序。代码是作为SDK的一部分提供的。工作得很好。制造商USB设备的响应非常好。后来,我想毕业后使用GUI应用程序,就像我在VB和c中所做的那样。瞧,我设法在Qt和Win32中重建了应用程序,但我遇到了应用程序没有响应的情况,我无法知道发生了什么
在控制台应用程序中,我必须在发送“TakeMeasurement”命令后执行此代码以与设备交互:调试Win32应用程序c++; 我的应用程序开始作为VS2019中的C++控制台应用程序。代码是作为SDK的一部分提供的。工作得很好。制造商USB设备的响应非常好。后来,我想毕业后使用GUI应用程序,就像我在VB和c中所做的那样。瞧,我设法在Qt和Win32中重建了应用程序,但我遇到了应用程序没有响应的情况,我无法知道发生了什么,c++,multithreading,console,win32-process,C++,Multithreading,Console,Win32 Process,在控制台应用程序中,我必须在发送“TakeMeasurement”命令后执行此代码以与设备交互: if (SDK_SUCCESSFUL(sdkError)) { printf("\nWaiting for measurement to complete...\n"); while (!isMeasureWait) { if (isDisConnect) break;
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,它们在运行时会弹出各种各样的“性能”内容
非常感谢您的帮助。我不确定自己是否完全理解正在发生的事情。 线程等待循环的执行不是罪魁祸首。 我不是100%确定,但在我的“将数据导出到CSV文本文件”中,如果我尝试执行以下调用:
SetWindowText(hEditMeasure, wMeasurements);
应用程序总是挂起。我在代码中的调用之前放置了断点,以跟踪执行情况,起初我并没有想到,但在VS工具栏中,有一个“线程”组合框?显示的值为=DEVICE.DLL?在它的右边,我的导出函数名为Stackframe。在搜索有关setWindowText函数的其他信息时,我无意中参考了使用VM_SETTEXT发送到“其他应用程序”的方法?可能是我在无意中向“另一个线程”,即DLL线程发送消息?这就是为什么它挂了?我不知道该怎么说。所以我开始移动setWindowText行,最终在“Measure”按钮调用的代码中,它成功了
我还没有走出困境,但我觉得我正在进步。感谢大家的帮助和耐心。什么代码修改布尔值?看起来您正在进行轮询,并且可能在每个回合中等待1的时间太长……但是每个回合中的1在控制台侧“正常工作”而没有故障?当从设备DLL调用TakeMeasurement命令时,设备应该完成它的任务,控制跳转到我在应用程序开始时初始化的设备处理程序。FWIW我测量了TakeMeasurement命令和返回数据之间经过的时间,即1203毫秒。如何声明
isMeasureWait
呢?@RichardCriten isMeasureWait在全球范围。它仅在收到设备响应后在DeviceHandler函数中更改。