c++控制台(非窗口,非MFC框架)里线程如何通过自定义消息通信

来源:互联网 发布:淘宝设置发货地 编辑:程序博客网 时间:2024/05/22 17:45
MFC只是封装了API可以参考下使用WIN32 API编写窗口实例程序。http://blog.csdn.net/bluesky_03/article/details/3423738里面有消息传递的用法
追问
这种也是基于窗口的情况下,那么基于控制台的情况下呢,
回答
比如#include <windows.h>extern "C"{WINBASEAPI HWND WINAPI GetConsoleWindow();}void main(void){                HWND hWnd = GetConsoleWindow();PostMessage(hWnd, WM_CLOSE, NULL, NULL);}即可向控制台发送关闭消息
追问
呵呵呵,这个我明白的,我的意思是,在不基于窗体的情况下,能否自定义消息,
回答
可以#include "stdio.h"#include "stdlib.h"#include <windows.h>#define WM_MYMSGWM_USER+100extern "C"{WINBASEAPI HWND WINAPI GetConsoleWindow();}DWORD WINAPI func2(LPVOID LpParameter){DWORD id = *(int*)LpParameter;while(1){PostThreadMessage(id, WM_MYMSG, 0, 0);Sleep(1000);}return 0;}DWORD WINAPI func1(LPVOID LpParameter){MSG msg;HWND hwnd = GetConsoleWindow();while(1){GetMessage(&msg, NULL, 0, 0);if (msg.message == WM_MYMSG){printf("Recv WM_MYMSG\n");}Sleep(1000);}return 0;}void main(void){DWORD id;HANDLE hthrd1 = CreateThread(NULL, 0, func1, NULL, 0, &id);HANDLE hthrd2 = CreateThread(NULL, 0, func2, &id, 0, 0);while(1){Sleep(1000);}}运行后控制台不停打印Recv WM_MYMSGRecv WM_MYMSGRecv WM_MYMSGRecv WM_MYMSG
0 0
原创粉丝点击