zoukankan      html  css  js  c++  java
  • win32

    创建win32窗口需要注册,回调函数一些操作,如果我们不需要窗口的话,可以使用下面代码获得一个仅有消息循环的控制台。

    ps: 这样做主要对一些不需要窗口但需要消息循环的程序特别有用,比如蓝牙回调。

    #include <Windows.h>
    #include <thread>
    #include <iostream>
    using namespace std;
    
    DWORD threadID{};
    
    
    void ThreadFunction(HANDLE event_handle)
    {
        MSG msg;
        BOOL result;
    
        threadID = GetCurrentThreadId();
        SetEvent(event_handle);
    
        for (;;)
        {
            result = GetMessage(&msg, nullptr, 0, 0);
    
            if (result <= 0)
            {
                break;
            }
    
            cout << msg.message << " " << msg.wParam << " " << msg.lParam << endl;
        }
    }
    
    int main()
    {
        HANDLE e = CreateEvent(nullptr, FALSE, FALSE, nullptr);
    
        thread t(ThreadFunction, e);
    
        WaitForSingleObject(e, INFINITE);
        CloseHandle(e);
    
    
        PostThreadMessage(threadID, WM_APP + 1, 1, 2);
        PostThreadMessage(threadID, WM_APP + 2, 10, 20);
        PostThreadMessage(threadID, WM_QUIT, 10, 20);
    
        t.join();
        return 0;
    }

    拓展:

    windows应用程序中的一个常见架构是有一个主UI线程(通常这是主线程),它创建并拥有所有UI,并有一个消息循环,为线程创建的所有UI发送消息。如果一个应用程序需要做一些可能会阻止的事情,比如从套接字读取数据,那么通常会使用一个工作线程来实现这个目的:你不希望UI线程阻止(例如,在等待套接字的输入时),因为在这段时间内它不会处理输入,UI最终会没有响应。

    如果你有多个UI要同时处理它们的消息的话,那么主线程的消息循环明显不够用,容易造成堵塞。 那么我们就可以编写一个包含多个UI线程的应用程序——每个创建windows的线程都需要自己的消息循环——但这是一种相当先进的技术,对于大多数基本的应用程序来说并不是那么有用。

    资料:How does the message loop use threads?

  • 相关阅读:
    点击鼠标上下滚动
    点击小圆圈切换图片(基础)
    js取整数、取余数的方法
    几张图片滚动切换
    (转)iPhone +ipad尺寸规范(界面 & 图标)
    基础选择分类
    JDBC事务
    JDBC
    mysql
    网络编程三要素
  • 原文地址:https://www.cnblogs.com/strive-sun/p/14487576.html
Copyright © 2011-2022 走看看