又来了,问题,问题!

qq14923349 2007-09-17 01:55:19
说再多话还不如让大家看代码

SetCommMask (handle, EV_TXEMPTY);
if(handle!=NULL)
WriteFile(handle,cByte,8, &dwWriteCount, 0);

WaitCommEvent( handle, &dwCommStatus, NULL );

if ((dwCommStatus & EV_TXEMPTY) == EV_TXEMPTY)//
{
ReadFile(handle,cGetByte, 24, &dwReadCount, NULL);
str.Format(_T("%02x %02x %02x %02x %02x %02x %02x %02x") , cGetByte[0] , cGetByte[1] ,
cGetByte[2] , cGetByte[3] , cGetByte[4] , cGetByte[5] , cGetByte[6] , cGetByte[7]);

MessageBox(NULL,"请按下手指.", "第一次采样", NULL);///////////////_______
}


PurgeComm( handle,PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_RXABORT|PURGE_TXABORT);

SetCommMask (handle, EV_RXCHAR);
WaitCommEvent( handle, &dwCommStatus, NULL );

if ((dwCommStatus & EV_RXCHAR) == EV_RXCHAR)//
{
ReadFile(handle,cGetByte, 8, &dwReadCount, NULL);
str.Format(_T("%02x %02x %02x %02x %02x %02x %02x %02x") , cGetByte[0] , cGetByte[1] ,
cGetByte[2] , cGetByte[3] , cGetByte[4] , cGetByte[5] , cGetByte[6] , cGetByte[7]);

if(str==(CString)("1b 72 73 00 03 84 32 b9"))
{
AfxMessageBox("??????");
}
my2.m_cedit="请抬起手指";

}


///////////////////////////////////////////////////////
好了,上面有两个问题,
一个是,如果不屏蔽这句
MessageBox(NULL,"请按下手指.", "第一次采样", NULL);///////
WaitCommEvent根本就没有监听了,感觉是PurgeComm没作用,设备返回的值根本就没得到,但是如果有例如MessageBox/AfxMessageBox()之类的就会有返回"??????"

第二个是,my2.m_cedit="请抬起手指";后my2.m_cedit没有反应,依旧是开始的字符串,
我这段程序是在dll中线程函数里.请大家一定帮忙.
...全文
172 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq14923349 2007-09-18
  • 打赏
  • 举报
回复
GetDlgItem(IDC_EDIT1)->SetWindowText("请抬起手指");
不行~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
是涉及到线程问题
得不到主窗口句柄,所以设置不了
谁会啊?
wfenj 2007-09-18
  • 打赏
  • 举报
回复
WaitCommEvent会不会是这个函数的第三个参数设置的问题,没仔细去查,可以看看~
sokewoniu 2007-09-18
  • 打赏
  • 举报
回复
GetDlgItem(IDC_EDIT1)->SetWindowText("请抬起手指");
qq14923349 2007-09-18
  • 打赏
  • 举报
回复
up
qq14923349 2007-09-17
  • 打赏
  • 举报
回复
那是硬件的设置了,

如果我在下面三句设置断点,程序就会阻塞,合乎我思想
PurgeComm(handle,PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_RXABORT|PURGE_TXABORT);

SetCommMask (handle, EV_RXCHAR);
WaitCommEvent( handle, &dwCommStatus, NULL );
但如果我不设置断点或者只设置WaitCommEvent( handle, &dwCommStatus, NULL );
WaitCommEvent就不会阻塞,我要疯了,出个人让我咬咬@@!!!!!!!
templarzq 2007-09-17
  • 打赏
  • 举报
回复
我不知道你的下位机怎么得知上位机触发屏幕呢??。。
qq14923349 2007-09-17
  • 打赏
  • 举报
回复
第二个问题老是提示空指针
CEdit *e =(CEdit *)GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_EDIT1);
e->SetWindowText("请抬起手指");
qq14923349 2007-09-17
  • 打赏
  • 举报
回复
第2个问题的
my2.SetWindowText("请抬起手指");
那么对话框标题就变为请抬起手指,如果是获取句柄会不会解决呢?我马上试试

第一个问题,我的上位机首先writefile给下位机,然后下位机会返回三段2进制,每段8字节.
第一段2进制会先返回,所以我获取他用EV_TXEMPTY,表示发送后自动返回,而后两段代码是再等待上位机触发屏幕才返回,所以我先清除缓冲区然后等待字符输入,但是不如人意啊,
coldplay968 2007-09-17
  • 打赏
  • 举报
回复
第2个问题 可能是m_cedit没有关联成功,你用SetWindowText试一下
第一个不知道
templarzq 2007-09-17
  • 打赏
  • 举报
回复
ev_txempty是你的写缓冲数据发送完毕,
ev_rxchar是收到数据。
我觉得你可以把那个EV_txempty事件的readfile屏蔽。
templarzq 2007-09-17
  • 打赏
  • 举报
回复
你的串口读写顺序和这个对话框弹出位置有问题。。
我觉得你应该是向串口写指令,然后下位机发回数据,顺序应该是:

MessageBox(NULL,"请按下手指.", "第一次采样", NULL);
writefile(....);
readfile(.....);

还有那个TXempty之后readfile是啥意思?。。。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧