现在的位置: 首页 > 综合 > 正文

自设计消息处理回调函数

2013年12月06日 ⁄ 综合 ⁄ 共 659字 ⁄ 字号 评论关闭
 下面这个消息处理回调函数由我自己设计
UINT __stdcall CQQSDlg::WorkThreadProc(LPVOID lpParameter)
{
TYPE_PACKET imsg;
int i;
// 设置消息队列是否为空的判断标志
    imsg.cmd_type = -1;
    while ( 0 != GetMessageQueue(imsg) )
{
        for ( i = 0; imsg.cmd_type != -1 && i < DIM(message_entries); ++i )
{
if ( imsg.cmd_type == message_entries[i].nmessage )
{
                CQQSDlg::message_entries[i].pfn(NULL,imsg,NULL,NULL);
   // 等待消息处理完后立刻跳出
break;
}
}
// 若消息队列为空,则休眠1秒钟,把更多的时间片让给接收虚拟通道数据包线程
if ( -1 == imsg.cmd_type )
{
Sleep(1000);
}
// very important ,否则会一直发送前一次的信息
imsg.cmd_type = -1;
}
return 0;
}
imsg.cmd_type = -1;  标志当前消息队列为空,假如在循环中没有设置这个参数那么回调函数将一直处理前一个消息包。如果这个消息包是通知打印一行字符,此时回调函数一直循环的处理这个消息包,则会出现循环的打印同一行字符。
Sleep(1000); 使得这个线程休眠 ,让出CPU.这样当没有消息要处理的时候,CPU不至于要百分之百的占用.

抱歉!评论已关闭.