积极答复者
同样程序,单步调试和直接执行有不同的结果

问题
-
我用事件驱动的形式对硬件发送命令,当我用单步调试的时候,执行没有错误,但是当我直接执行的时候,却有时候出现打开模态对话框失败的情况。具体如下:
在单步调试时候,获得的GetLastError的值为0,成功,但是当直接执行的时候,错误码会有ERROR_PATH_NOT_FOUND,在关闭该对话框的时候,出现ERROR_INVALID_WINDOW_HANDLE,我看了我定义的HANDLE句柄以及全局变量,在调试的时候,没有什么变化,但是当打开另一个对话框进行发送命令的时候,就会出现错误,也就是该内存不能为read。还有就是在WriteFile之后,如果要是用AfxMessageBox()显示一下error号码,会显示ERROR_IO_PENDING,之后error就是0了。
我实在是搞不懂,请高手帮我分析一下原因,或者给出一些针对此问题的调试建议。
非常的感谢!
答案
-
这个问题是和时间有关的,慢速设备需要等待时间。
ERROR_IO_PENDING这个错误是因为你在使用异步模式读取设备,IO在等待设备返回,你需要使用异步模式的方式去获取数据。
如果你对异步不熟悉或者你的程序不需要特别高的性能,建议你使用同步模式,这样必须有数据可读才会返回,就不会有这种问题了。
ERROR_INVALID_WINDOW_HANDLE的问题应该是你在窗口调用的时候访问了已经释放的窗口,这个问题可能是由于多线程导致的很不好找错误原因,你只能通过打日志的方法来找问题而不是单步调试。
0xBAADF00D- 已标记为答案 神秘人 2010年4月12日 2:01
全部回复
-
这个问题是和时间有关的,慢速设备需要等待时间。
ERROR_IO_PENDING这个错误是因为你在使用异步模式读取设备,IO在等待设备返回,你需要使用异步模式的方式去获取数据。
如果你对异步不熟悉或者你的程序不需要特别高的性能,建议你使用同步模式,这样必须有数据可读才会返回,就不会有这种问题了。
ERROR_INVALID_WINDOW_HANDLE的问题应该是你在窗口调用的时候访问了已经释放的窗口,这个问题可能是由于多线程导致的很不好找错误原因,你只能通过打日志的方法来找问题而不是单步调试。
0xBAADF00D- 已标记为答案 神秘人 2010年4月12日 2:01