win32、C++中的连续串行写入

Continuous serial write in win32 , C++

本文关键字:连续 C++ win32      更新时间:2023-10-16

我需要在串行端口上执行连续串行写入,直到应用程序运行为止。有人能建议在使用win32的串行通信中,以规则的时间间隔连续写入数据的适当步骤是什么吗。

我已经完成了端口打开、写入、读取和关闭按钮点击。这意味着如果我点击打开按钮,它就会打开端口,写入按钮写入,读取按钮读取,关闭按钮关闭端口。我在win32平台上使用了串行端口上的文件操作技术。步骤可以概括为

  1. 打开端口(createfile)
  2. 检查端口是否存在
  3. 设置串行参数
  4. 设置超时
  5. 写入数据(写入文件)
  6. 读取数据(读取文件)
  7. 关闭端口

我这样做是为了学习串行通信。但实际上,我必须连续写入数据,直到应用程序运行,同时在串行端口中可用时读取数据。我在程序中没有实现线程概念。线程对我来说是一个新话题,如果我必须使用它来实现我的目标,请建议一个适当的步骤。我的目标是

  1. 连续写入数据,直到应用程序运行
  2. 连续数据应该以一定的时间间隔写入。(c++中有定时器的概念吗?)
  3. 只要串行端口上有数据可用,就从该端口读取数据

我们将非常感谢你的帮助。

stopSignal=CreateEvent(stuff);  //signal this with SetEvent() to stop the serial thread. 
..
CreateThread(blah,SerialThreadProc,blah);
..
void* SerialThreadProc(){
    open port (createfile);
    check port exist or not;
    set serial parameters;
    set timeouts;
    do{
      write data (writefile);
      read data (readfile);
    }while(WAIT_TIMEOUT==WaitForSingleObject(stopSignal,commsInterval));//expect yoda flame
    close port
};

如果您想同时进行Windows API串行读取和写入,则需要有一个读取线程和一个写入线程。如果您在GUI程序中执行此操作,那么这些线程应该与主GUI线程分离。

MSDN的这篇文章描述了详细信息,并提到了一个名为MTTTY的示例代码,它结合了读、写和GUI。不幸的是,MTTTY似乎在MSDN上不再可用。如果您可以访问旧的MSDN库磁盘,也许您可以找到它。

http://msdn.microsoft.com/en-us/library/ff802693.aspx