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;
在串口编程中有什么用,如何调试,这几行?
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;
在串口编程中有什么用,如何调试,这几行?
这只是一个函数,我在调试一个串口程序时,调入了这个函数。
在这里循环,像在等代什么?循环到某一刻就跳入到Mscomm中OnComm事件
本想在这看看发生了什么,却不知道如何看,这里发生了什么?
处理完OnComm事件又来循环,然后退出这个函数?请问这里发生了什么?如何调试?
Peekmessage(sm,0,0,0,PM_REMOVE)取出接收到的消息,并从消息队列中把消息移除,再循环体内处理消息。
Translatemessage(sm); //将虚拟键消息转换为字符消息,处理消息
DispatchMessage(sm); //将消息发送给窗口过程(传递消息),继续传播消息,系统有其他地方处理这个加工后的消息循环一直等到超时为止。
估计你是想找系统处理加工后消息的地方吧
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事件,为什么??谢谢,您了,不好意思再问你了!