在win32,C ++中连续串行写入

时间:2013-12-05 08:54:44

标签: c++ multithreading winapi serial-port

我需要在串口上执行连续的串行写操作,直到应用程序运行。任何人都可以建议使用win32在串行通信中以常规时间间隔连续写入数据的适当步骤。

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

  1. open port(createfile)
  2. 检查端口是否存在
  3. 设置序列参数
  4. 设置超时
  5. 写入数据(写文件)
  6. 读取数据(readfile)
  7. 关闭端口
  8. 我这样做是为了了解串行通信。但实际上我必须连续写入数据,直到应用程序运行,同时读取串行端口可用的数据。我没有在我的程序中实现线程概念。线程对我来说是一个新主题,如果我必须用它来获得我的目标,请提出适当的步骤。我的目标是

    1. 持续写入数据,直到应用程序运行。
    2. 连续数据应以特定时间间隔写入。 (在c ++中是否有任何计时器概念)。
    3. 只要端口有数据,就从串口读取数据。
    4. 非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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
};

答案 1 :(得分:0)

如果要同时执行Windows API串行读取和写入,则必须具有读取线程和写入线程。如果您在GUI程序中执行此操作,则这些线程应与主GUI线程分开。

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

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