C++ Win API串行端口需要在初始化后等待

C++ Win API串行端口需要在初始化后等待,c++,windows,winapi,visual-studio-2013,arduino-due,C++,Windows,Winapi,Visual Studio 2013,Arduino Due,我有以下问题。我有一个串行端口设备,可以与计算机通信。事实上,这是Arduino应有的董事会,但我不认为这是相关的 我使用CreateFile打开端口,然后使用GetCommState&SetCommState和GetCommTimeout&SetCommTimeout设置参数 端口已正确打开-没有问题。但此时我想检查设备是否已连接。所以我发了一条特别的信息。设备应该以某种方式响应,以便我知道它已连接 现在问题来了:只有在发送握手请求之前创建端口后放入Sleep1000,它才起作用。看起来Win

我有以下问题。我有一个串行端口设备,可以与计算机通信。事实上,这是Arduino应有的董事会,但我不认为这是相关的

我使用CreateFile打开端口,然后使用GetCommState&SetCommState和GetCommTimeout&SetCommTimeout设置参数

端口已正确打开-没有问题。但此时我想检查设备是否已连接。所以我发了一条特别的信息。设备应该以某种方式响应,以便我知道它已连接

现在问题来了:只有在发送握手请求之前创建端口后放入Sleep1000,它才起作用。看起来WinAPI需要一些时间才能开始使用该端口。因为睡眠解决方案通常不可用,我需要找到一些替代方案

我说它不工作是指ReadFile超时。即使超时设置为5秒左右,它也会超时-请注意,睡眠间隔仅为1秒。所以看起来握手请求甚至没有被发送。如果我将超时设置为1秒,将睡眠间隔设置为1秒,那么它就工作了。如果我将超时设置为5秒,但没有睡眠,则无法工作。看到问题了吗


我将尝试一些NetworkMonitor,但我有点确定问题不在设备上…

好的,在发布此问题之前,我可能已经搜索了更多

问题是,当你打开电脑连接时,Arduino会自动重启

当您使用终端时,首先连接,几秒钟后写入,这样Arduino板就有足够的时间启动,您就不会注意到这一点。这让我很困惑,以至于写下了这个问题

有3种解决方案,其中只有2种值得一提:

1我使用的解决方案不知道这一切,你等待大约一秒钟的董事会再次启动。。。 2您可以通过修改Arduino板来禁用自动重置


如果你问我,他们两个都很愚蠢,应该有一个开关或一个闪存变量来完成这项工作…

如果你有另一台可以作为程序员使用的设备,可能没有什么可以阻止你在到期时重新编程固件。Ebay上的Pro Mini克隆版每个售价约4美元。。。在FTDI usb->串行板上再加4或5块,15美元以下就有2块。。