在WindowsCE,C ++项目中,我正在尝试使用通过“真实”串行端口和/或串行到usb包装器(“虚拟”串行端口)连接的设备;我的问题是 - 当我尝试打开端口时,如果出现问题,该功能永远不会返回,系统进入某种非响应状态,必须最终重新启动。我需要从主线程打开端口。问题是 - 我怎样才能以受控方式实现? 这是开头的代码片段:
std::ostringstream device_name;
device_name << "\\\\.\\COM" << port;
m_port = ::CreateFile(device_name.str().c_str(),
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, // overlapped I/O
NULL); // null template
任何建议都将不胜感激
谢谢!
答案 0 :(得分:2)
您无法保护自己免受恶意USB设备驱动程序的侵害。四处寻找更好的。
答案 1 :(得分:1)
为什么不在另一个线程中执行open?没有理由在该线程中执行任何其他操作 - 只需打开端口,您就可以在进程中的任何其他线程中使用已打开端口的句柄。
但是,我不确定你的CreateFile()
调用似乎挂起了什么 - 我想知道是否在其他线程上发生这种情况是否会在您的应用程序中保持稳定。
答案 2 :(得分:0)
免责声明:我从来没有做过WinCE,我个人对使用公司的操作系统进行嵌入式系统有所保留,该系统使“蓝屏死机”成为一个家庭术语。
愚蠢的问题第一:您是否确认没有其他人已经打开过那个特定的COM端口?
您要求独家访问权限。如果其他人已经拥有它,我期望系统挂起你的任务,直到另一个人释放端口。