下面是本人学习时写的demo程序,主要是实现一个控制台程序的定时器,做好封装并在相应位置加上回调函数就能用在项目里面了
百度文库有一篇文章写得灰常好,看一遍就大致明白怎么使用消息队列了 http://wenku.baidu.com/view/12955aaddd3383c4bb4cd2fe.html
#include <assert.h>
#include <iostream>
#include <stdio.h>
#include <windows.h>
using namespace std;
DWORD threadID = 0;
DWORD WINAPI MyTimer(void* ptr)
{
threadID = GetCurrentThreadId();
UINT uTimerID = 1;
MSG msg;
uTimerID = SetTimer(NULL, uTimerID, 5000, NULL);
while (GetMessage(&msg, (HWND)NULL, 0, 0))
{
TranslateMessage(&msg);
switch (msg.message) {
case WM_TIMER:
{
printf("WM_TIMER(0x%x) comes. TimerID = %d.\n", msg.message, msg.wParam);
break;
}
default:
{
printf("0x%x comes.\n", msg.message);
break;
}
}
}
printf("jump out of while loop.\n"); http://
assert(msg.message==WM_QUIT);
KillTimer(NULL, uTimerID);
return 0;
}
int main (int argc, char** argv)
{
HANDLE threadHandle = CreateThread(NULL, 0, MyTimer, NULL, 0, NULL);
while (true) {
Sleep(20000);
PostThreadMessage(threadID, WM_QUIT, NULL, NULL);
break;
}
WaitForSingleObject(threadHandle, INFINITE);
system("PAUSE");
return 0;
}
这里是从本人项目中摘录的定时器代码,注释掉无关代码就可以拿去使用了
PS:
1.只要拿到线程id,跨进程也是可以发送消息的
2.线程和进程一样都有TerminateProcess/TerminateThread的方法 和 GetExitCodeProcess/GetExitCodeThread方法(0正常,非0异常)