c - Multithreading en Windows tilbagekaldsfunktion

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en metode til at oprette et vindue i Windows, skrevet i C. Det bruger standardkode som ser sådan ud:


WNCDCLASS w1 = {0};

w1.lpszClassName = TEXT( "the\_window" );
w1.lpfnWndProc = methodIWantOnItsOwnThread;
// snip


Nu har jeg været multithreading med & ltprocess.h> tråde i en metode som:


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


Hvordan kan jeg multithread sådan her i Windows Callback-funktionen, som med w1.lpfnWndProc = methodIWantOnItsOwnThread;?


Flere kode.



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

Bedste reference


Du går om dette bagud, og det går ikke på arbejde.


Du skal have hvert vindue oprette en tråd, ikke hver tråd oprette et vindue. Derefter opretter du blot flere forekomster af WNDCLASS klassenavnet, og hver har sin egen tråd, der kan sende og modtage meddelelser.


Dette giver dig også et vindueshåndtag, som din hovedtråds vindue kan bruge til at sende og modtage meddelelser, så du kan kommunikere ting til trådene (og omvendt).

Andre referencer 1


Hvorfor vil du gøre det?


Vinduet proc kører på tråden, der skabte vindueshåndtaget. Selvfølgelig skal hver tråd, der skaber vindueshåndtag, i forlængelse af en meddelelsessløjfe.