文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Windows平台进程间通信: 用Windows消息做IPC

Windows平台进程间通信: 用Windows消息做IPC

时间:2010-09-02  来源:kgisme170

        Windows保留的消息有1024个。用户要用自定义消息,就要用WM_USER加上一个整数。这种消息可以发送给系统中的任何一个线程(PostThreadMessage),进程,或者窗口(PostMessage)。

1. 最简单的一个例子:一个Win32控制台程序,进入while循环来用GetMessage等待消息。在这之前,建立一个Thread,这个线程的作用是,每隔一秒钟,给主线程(主线程的id用GetCurrentThreadId()传递给了CreateThread函数作为参数)发送一个消息,主线程接受到了以后,打印出来。程序的输出结果是2024 2024 2024......无穷的循环下去。

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#define WM_MY_MESSAGE (WM_USER+1000)
DWORD WINAPI Thread_Proc( LPVOID lpParameter)
{
    DWORD id = (DWORD)lpParameter ;
    while ( true ){
        PostThreadMessage ( id, WM_MY_MESSAGE, 0, 0 ) ;
        Sleep ( 1000 ) ;
    }
    return 0 ;
}
int _tmain(int argc, TCHAR* argv[])
{
    CreateThread ( NULL, 0, (LPTHREAD_START_ROUTINE)Thread_Proc, (LPVOID)GetCurrentThreadId(), 0, NULL ) ;
    MSG msg ;
    while ( GetMessage ( &msg, NULL, 0, 0 ) ){
        TranslateMessage ( &msg ) ;
        DispatchMessage ( &msg ) ;
        printf ( "%d ", msg.message ) ;
    }
    return 0;
}

2. 一个稍微复杂点的例子,还是Win32控制台程序。这次在一个线程里面去GetMessage.主线程等待用户输入任意的一个键盘事件,子线程得到这个消息以后退出,否则不停的打印一条消息(计时器bRet=1)。主线程退出的时候,虽然子线程还在while,但是仍然是要被强制退出的。

#include"stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int count =0;
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
  count++;
  printf("WM_TIMER in work thread count=%d\n",count);
}
DWORD CALLBACK Thread(PVOID pvoid){
  MSG msg;
  PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE);
  UINT timerid=SetTimer(NULL,111,3000,TimerProc);
  BOOL bRet;
  while( (bRet = GetMessage(&msg,NULL,0,0))!= 0){
     if(bRet==-1){
         exit(1);
     }else{
         TranslateMessage(&msg);
         DispatchMessage(&msg);
     }
  }
  KillTimer(NULL,timerid);
  printf("thread end here\n");
  return 0;
}
int _tmain()
{
  DWORD dwThreadId;
  printf("use timer in workthread of console application\n");
  HANDLE hThread = CreateThread(NULL,0,Thread,0,0,&dwThreadId);
  _getch();
  return 0;
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载