Windows控制台程序的消息队列使用笔记

下面是本人学习时写的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异常)


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值