c - 多线程 Windows 回调函数

标签 c windows multithreading

我有一个在 Windows 中设置窗口的方法,用 C 编写。它使用如下所示的标准代码:

WNCDCLASS w1 = {0};

w1.lpszClassName = TEXT( "the_window" );
w1.lpfnWndProc = methodIWantOnItsOwnThread;
// snip

现在,我已经在以下方法中使用 <process.h> 线程进行多线程处理:

HANDLE h;
h = (HANDLE) _beginthread(methodIWantOnItsOwnThread, 0, 0);

如何在 Windows 回调函数中像这样多线程,例如使用 w1.lpfnWndProc = methodIWantOnItsOwnThread;

更多代码。

HWND SetupWindow(int device)
{
    HWND hwnd;
    WNDCLASS w1 = {0};

    if (device == 1)
    {
        w1.lpszClassName = TEXT( "window 1" );
        w1.lpfnWndProc   = methodIWantThreaded;
    }
    else
    {
        w1.lpszClassName = TEXT( "window 2" );
        w1.lpfnWndProc   = otherMethodIWantThreaded;
    }
    w1.hInstance     = 0;
    w1.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
    w1.hCursor       = LoadCursor(0, IDC_ARROW);
    RegisterClass(&w1);

    hwnd = CreateWindow( w1.lpszClassName, TEXT("The Window"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 520, 650, 520, NULL, NULL, 0, NULL);

    SetTimer(hwnd, 0,30,NULL);
    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);
    return hwnd;
}

最佳答案

你正在倒退,这是行不通的。

您应该让每个窗口创建一个线程,而不是每个线程创建一个窗口。然后,您只需创建 WNDCLASS 类名的多个实例,每个实例都有自己的可以发布和接收消息的线程。

这还为您提供了一个窗口句柄,主线程的窗口可以使用该句柄发送和接收消息,从而允许您与线程进行通信(反之亦然)。

关于c - 多线程 Windows 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5599395/

相关文章:

c# - 开始结束异步方法调用

c# - 具有变体的生产者-消费者 - 如何与线程信号/等待同步?

使用结构时发出警告

windows - Dos 提示符 - 仅在出错时暂停执行/显示?

windows - 如何在 WiX 安装程序中更改 Windows 服务启动类型

mysql - 在Windows上安装MySQL root密码是否太复杂?

java - Mysql是否在一个连接中同步执行语句?

c - 在 Quake 中使用 CreateEvent()

c++ - Linux ext3 和 ext4 文件 - 兼容性问题

关闭/清理 "mixed"文件描述符/套接字