var
    wTime  :TDateTime;
    TestTime  : Dword ;
    Sm: Msg; 
begin
    TestTime :=   GetTickCount ;  
                  //用于获取自windows启动以来经历的时间长度
    wTime := GetTickCount + WaitTime;
    while wTime>GetTickCount do
    begin  
              //Peekmessage()如果消息隊列中沒有消息,PeekMessage立刻返回0
        while(Peekmessage(sm,0,0,0,PM_REMOVE)) do
        begin
            Translatemessage(sm); //将虚拟键消息转换为字符消息
            DispatchMessage(sm);  //将消息发送给窗口过程(传递消息)
        end;     
    end;
end;
在串口编程中有什么用,如何调试,这几行?

解决方案 »

  1.   


    这只是一个函数,我在调试一个串口程序时,调入了这个函数。
    在这里循环,像在等代什么?循环到某一刻就跳入到Mscomm中OnComm事件
    本想在这看看发生了什么,却不知道如何看,这里发生了什么?
    处理完OnComm事件又来循环,然后退出这个函数?请问这里发生了什么?如何调试?
      

  2.   

    应该是等待串口信息,当接收到串口信息时触发Mscomm中OnComm事件,
    Peekmessage(sm,0,0,0,PM_REMOVE)取出接收到的消息,并从消息队列中把消息移除,再循环体内处理消息。 
     Translatemessage(sm); //将虚拟键消息转换为字符消息,处理消息
     DispatchMessage(sm);  //将消息发送给窗口过程(传递消息),继续传播消息,系统有其他地方处理这个加工后的消息循环一直等到超时为止。
    估计你是想找系统处理加工后消息的地方吧
      

  3.   

    你就在DispatchMessage(sm);  这加个断点然后不停的F7跟进去,看消息到底最后谁接收处理了
      

  4.   

    是这样一个过程:
    1.创建mscomm,设置通讯参数,创建Oncomm事件
    2.打开串口,发送AT命令
    3.进入上面的函数(100)循环什么也没有做,退出(因为 wTime>GetTickCount 不成立
                                                    sm(0,0,0,0,0,(0,0)) )
    4.发送AT命令
    5.进入上面的函数(500)循环,进入了Oncomm事件,
       调试时看见  sm(hwnd,message,wParam,IParam,time,pt)是什么意思???
       在hwnd有值并执行DispatchMessage(sm)时进入Oncomm事件,为什么??谢谢,您了,不好意思再问你了!
      

  5.   

    实际上就是一个延时操作,释放CPU的部分资源给其它程序使用,不至于CUP占用到很高.