b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

translatemessage_dispacthmessage函数_windows createfile(6)

电脑杂谈  发布时间:2017-05-28 09:01:44  来源:网络整理

备注:消息将寄送到的线程必须创建消息队 列,否则调用PostThreadMessage会失败。用下列方法之一来处理这种情况:

调用PostThreadMessage。 如果失败,调用Sleep,再调用PostThreadMessage,反复执行,直到PostThreadMessage成功。

创建一个事件对象,再创建线程。在调用 PostThreadMessage之前,用函数WaitForSingleObject来等特事件被设置为被告知状态。消息将寄送到的线程调用 PeekMessage(£msg,NULL,WM_USER,WM_USER,PM_NOREMOVE)来强制系统创建消息队列。设置事件,表示线程已 准备好接收寄送的消息。

消息将被寄送到的线程通过调用 GetMesssge或PeekMesssge来取得消息。返回的MSG结构中的hwnd成员为NULL。

速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。

---------------------------------------------------------------------------------------

把window线程间传送消息仔细的看了一遍,觉得以前的理解 很不深刻。说一说对PostThreadMessage的 理解。

PostThreadMessage是一个线程体发送一个消息 到指定的线程ID,其 原型如下:

BOOL PostThreadMessage(

DWORD idThread,

UINT Msg,

WPARAM wParam,

LPARAM lParam

);

这个函数既可以发送消息给工 作线程,也可以发送给UI线 程。接受PostThreadMessage的 线程必须已经有了一个message queue, 否则调用PostThreadMessage会 失败。因为此原因使用GetLastError会 得到错误码为1444,

这种情况经常出现,解决方法有如下两种:

1. 调 用PostThreadMessage, 如果失败,就Sleep一 段时间再次调用PostThreadMessage直 到调用成功;

2. 创 建一个Event对 象,让PostThreadMessage等 待接受的线程创建一个message queue。 可以通过调用PeekMessage强 制系统创建一个message queue。 示例代码如下:

假设mainAPP是发送线程ThreadA是接受线程

/*mainAPP.cpp*/

……

hStartEvent = ::CreateEvent(0,FALSE,FALSE,0); //create thread start event

if(hStartEvent == 0)

{

printf("create start event failed,errno:%d\n",::GetLastError());

return 1;

}

::WaitForSingleObject(hStartEvent,INFINITE);

CloseHandle(hStartEvent);

if(!PostThreadMessage(threadaID, WM_MESSAGE_A,0,0))


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49688-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 齐献公
      齐献公

      王建煊代表了台湾一部分聪明人

    • 李现庄
      李现庄

      期盼节目的来到

    • 王青海
      王青海

      别学苏联搞冷战

    热点图片
    拼命载入中...