Advertisement

2024年C C++最全线程间通讯:PostThreadMessage,2024年最新C C++Apk安装过程

阅读量:
img
img

包含针对初学者提供的入门资源和专业学习者提供的高级课程,并全面覆盖当前主流的95%以上C/C++开发知识点。

考虑到文件数量较多

如果你需要这些资料,可以戳这里获取

3、实际应用中,会用 BEGIN_MESSAGE_MAP 宏定义消息映射表(MFC)


PostThreadMessage是一个Windows API函数, 用于将消息发送至指定线程的消息队列中

1、PostThreadMessage的函数原型
复制代码
    BOOL PostThreadMessage(
      DWORD  idThread,
      UINT   Msg,
      WPARAM wParam,
      LPARAM lParam
    );
  • 线程ID号idThread用于标识目标处理单元。
    • 消息类别Msg定义了待传输的数据类型。
    • 指令码wParam指定额外操作所需的参数信息。
    • 参数lParam提供补充所需的数据细节。

PostThreadMessage函数负责将消息投递到专属指定线程的消息通道中,并且之后立即返回。多通过利用GetMessage或PeekMessage函数接收并解析该条信息。此函数多用于线程间的通信交流机制,并能够支持自定义信息传输以及系统默认的信息传输,并助力各线程之间的协作与信息共享。

2、PostThreadMessage一个简单的示例

演示如何使用PostThreadMessage向另一个线程发送消息:

复制代码
    #include <windows.h>
    #include <iostream>
    
    DWORD WINAPI ThreadProc(LPVOID lpParam)
    {
    MSG msg;
    HWND hWnd = (HWND)lpParam;
    
    // 等待消息循环
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (msg.message == WM_USER)
        {
            std::cout << "Received custom message." << std::endl;
        }
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    
    return 0;
    }
    
    int main()
    {
    // 创建一个新线程
    DWORD threadId;
    HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &threadId);
    if (hThread == NULL)
    {
        std::cout << "Failed to create thread." << std::endl;
        return 1;
    }
    
    // 等待一段时间
    Sleep(1000);
    
    // 向线程发送消息
    if (!PostThreadMessage(threadId, WM_USER, 0, 0))
    {
        std::cout << "Failed to post thread message." << std::endl;
        return 1;
    }
    
    // 等待线程结束
    WaitForSingleObject(hThread, INFINITE);
    
    // 关闭线程句柄
    CloseHandle(hThread);
    
    return 0;
    }

以上述示例为例,在此过程中我们新建了一个新的线程,并启动了CreateThread函数以启动该线程。随后我们调用了PostThreadMessage函数向该新线程发送了一个自定义消息 WM_USER。在线程的消息循环期间我们将使用GetMessage函数来接收并处理消息。在此过程中我们判断接收到的消息是否是自定义消息 WM_USER 并采取相应的处理措施之后我们将等待该线程结束并关闭其句柄

请特别注意上述示例中的线程函数ThreadProc是一个基础的消息循环系统,它被用来处理线程接收的消息.在实际应用环境中,请根据具体需求自定义消息处理流程.

3、实际应用中,会用 BEGIN_MESSAGE_MAP 宏定义消息映射表(MFC)

将自定义消息和处理函数一一对应起来

(1)先了解下BEGIN_MESSAGE_MAP

BEGIN_MESSAGE_MAP 作为一个宏定义,在 Microsoft Foundation Classes(MFC)环境中被设计为实现消息映射表的功能。该宏定义整合了 Microsoft 平台中广泛使用的 API 函数与功能,并通过其特有的机制简化了 Windows 应用程序的开发效率。

img
img

不仅提供了针对初学者的入门级学习材料,还配备了资深开发者进行系统深入的学习与提升空间。课程内容经过精心设计和组织,包含超过95%的核心C/C++开发知识点。

鉴于文件数量较多,在此仅作为参考展示一整套包含的大厂面经、学习笔记、源代码资料、实战项目案例、详细项目大纲规划以及教学视频资源,并计划后续持续更新完善

如果你需要这些资料,可以戳这里获取

**

因为文件数量较多,在这里仅对部分目录进行了截图展示;整个套装内容包括大公司面试题库、学习资料包(涵盖源代码教学材料)、实际项目经验分享以及系统化的课程大纲规划,并提供教学视频讲解;后续也会不断更新完善以确保内容与时俱进

如果你需要这些资料,可以戳这里获取

全部评论 (0)

还没有任何评论哟~