专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++ Builder

再请问大侠

发布时间:2011-06-28 11:20:29 文章来源:www.iduyao.cn 采编人员:星星草
再请教大侠
我在百度上找了个串口发送和接受的例子:

for(;;)
 {
   bResult = ::ClearCommError(hComm,&dwError,&comstat);
    if(comstat.cbInQue == 0)
      continue;
      //if(!::SetCommMask(hComm,EV_RXCHAR))
         //continue;
    if(bRead)
    {
      bResult = ::ReadFile(hComm,
                         &RXBuff,
                         1,
                         &BytesRead,
                         &m_ov);
可是当使用ClearCommError函数时,得到的cbInque总是为0,导致死循环。
然而使用SetCommMask函数可以得到缓冲区已经接收到数据 了,只是用下面的ReadFile函数读出的数据不正确,这个又是咋回事呢。。。。求解

------解决方案--------------------
你可以用一个线程来接受串口数据
------解决方案--------------------
找个串口类文件吧


谷歌一下,很多

实在没有,我给你发一个就是了。
------解决方案--------------------
可以考虑用Victor大牛的串口组件。

BTW:刚才我的回复哪里去了?负责审核的工作人员能给个解释吗?
------解决方案--------------------
不是机器人负责审核吗,还没那个人工智能做解释吧
------解决方案--------------------
剛才我大概看一下...因為其一是以永久循環迴路來做例子...其二是使用 Communicate 的 Overlapped 模式...所以在調試檢測通訊狀態或讀寫時並不會等待完成函數就直接離開...當然會導致死循環囉~ 實際的作法必須以計時器或多線程方式來輪詢......

SetCommMask 與 WaitCommMask 應該是匹配使用的...你所列出的例子其敘述並不是那麼完整...建議你把完整的例子給列出必較容易看出問題喔......
------解决方案--------------------
我给你一个串口程序你参照下  前不久刚写的 没问题
void __fastcall TMainForm::CreatComm()
{
    Comm.hCom = CreateFile( g_strCommPort.c_str(),GENERIC_READ
------解决方案--------------------
GENERIC_WRITE,
                                0,
                                NULL,
                                OPEN_EXISTING,
                                FILE_FLAG_OVERLAPPED,
                                NULL);

    if ( Comm.hCom == INVALID_HANDLE_VALUE )
    {
        //ShowMessage("串口打开错误!");
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: