Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Jak używać eventów?

Ostatnio zmodyfikowano 2014-08-16 19:52
Autor Wiadomość
Vister26
Temat założony przez niniejszego użytkownika
[WinAPI] Jak używać eventów?
» 2014-08-16 17:37:00
Przeczytałem » Kurs WinAPI, C++ » ZaawansowaneWątki lekcja (do rozdziału "zdarzenia" włącznie) i mam problem ze zdarzeniami. Oto kod:
C/C++
#include <windows.h>
#include <process.h>
#include <iostream>

void __cdecl mainThreadProc( void * Args );

HANDLE hIsWypisane;

using std::cout;
using std::endl;

int main()
{
    HANDLE hMainThread =( HANDLE ) _beginthread( mainThreadProc, 0, NULL );
    hIsWypisane = CreateEvent( NULL, TRUE, FALSE, NULL );
    WaitForSingleObject( hMainThread, 1000 );
    cout << " tutaj1 " << endl;
}

void __cdecl mainThreadProc( void * Args )
{
   
    for( int i = 0; i < 3; i++ )
         cout << " mainThread " << endl;
   
    SetEvent( hIsWypisane );
   
    for( int i = 0; i < 3; i++ )
         cout << " mainThread2 " << endl;
   
    _endthread();
}

Na wyjściu wyświetla to:

mainThread
mainThread
mainThread
mainThread2
mainThread2
mainThread2
tutaj1

Chciałbym, żeby było tak:

mainThread
mainThread
mainThread
tutaj1
mainThread2
mainThread2
mainThread2

Kombinuję od dwóch godzin, ale czuję, że nadal nie rozumiem jak to działa. Co muszę zmienić?
P-115583
Vister26
Temat założony przez niniejszego użytkownika
» 2014-08-16 19:52:28
Problem rozwiązany. Błąd był w tej linii:
C/C++
WaitForSingleObject( hMainThread, 1000 );

Ta funkcja powinna czekać na event, więc należy przekazać jej HANDLE hEvent zamiast HANDLE hThread:
C/C++
WaitForSingleObject( hIsWpisane, 1000 );

Tutaj była odpowiedź:
Synchronizacja Wątków
P-115587
« 1 »
  Strona 1 z 1