Многопоточность функции обратного вызова Windows - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть метод для настройки окна в Windows, написанный на C. Он использует стандартный код, который выглядит следующим образом:

WNCDCLASS w1 = {0};

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

Теперь у меня многопоточность с потоки в методе, таком как:

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;
}

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Вы идете об этом задом наперед, и это не сработает.

У вас должно быть каждое окно , создающее поток, а не каждый поток , создающий окно. Затем вы просто создаете несколько экземпляров класса WNDCLASS, каждый из которых имеет собственную ветку, которая может отправлять и получать сообщения.

Это также дает вам дескриптор окна, который окно вашего основного потока может использовать для отправки и получения сообщений, что позволяет вам сообщать вещи потокам (и наоборот).

0 голосов
/ 08 апреля 2011

Почему вы хотите это сделать?

Процесс окна работает в потоке, который создал дескриптор окна. Разумеется, каждый поток, создающий дескрипторы окна, должен иметь цикл обработки сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...