[C/C++] DWORD WINAPI MyThread (Erstellung von Threads)

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Coksnuss, 31. Januar 2009 .

Schlagworte:
  1. 31. Januar 2009
    DWORD WINAPI MyThread (Erstellung von Threads)

    In einem Buch was ich grade lese gibt es folgenden Beispielcode für das erstellen eines Threads:

    Code:
    // The custom thread function
    DWORD WINAPI MyThread(LPVOID lpParameter)
    {
     BOOL *Active;
     Active = (BOOL*)lpParameter;
     *Active = TRUE; // flag thread as active
    
     // Insert custom code here
    
     // Terminate the thread
     *Active = FALSE; // flag thread as no longer active
     ExitThread(0); // special call to close thread
    }
    
    void InitThread()
    {
     HANDLE hThread;
     DWORD ThreadId;
     BOOL Active;
    
     // Create the thread, passing a user-defined variable that
     // is used to store the status of the thread.
     hThread = CreateThread(NULL, 0, \
     (LPTHREAD_START_ROUTINE)MyThread, (void*)&Active, \
     0, &ThreadId);
    
     // Wait for the thread to complete by continuously
     // checking the state of the flag.
     while(Active == TRUE);
    
     // Close the thread handle
     CloseHandle(hThread);
    }
    
    So... Meine Frage: Ist es denn nicht möglich das die Variable Active noch garnicht inizialisiert ist zu dem Zeitpunkt der 1. Überprüfung innerhalb der while-Schleife?

    Oder anders gefragt: Kann ich davon ausgehen das
    Code:
    *Active = TRUE; // flag thread as active
    vor
    Code:
    while(Active == TRUE);
    ausgeführt wird?

    Danke schonmal für eure Antworten
     
  2. 1. Februar 2009
    Ehmm, das hat doch direkt garnix mehr mit der Frage zu tun....?
    Active kann ja nur innerhalb des Threads verändert werden, im anderen Thread wird ausschlieslich der Status abgefragt während der Thread läuft...
     
  3. 1. Februar 2009
    mir gehts einfach da drum es richtig zu machen, dann erübrigt sich nämlich auch die frage

    Code:
    // The custom thread function
    DWORD WINAPI MyThread(LPVOID lpParameter)
    {
    mutexlock
    
     // Insert custom code here
    
    mutexunlock
    }
    
    void InitThread()
    {
     HANDLE hThread;
     DWORD ThreadId;
     BOOL Active;
    
     // Create the thread, passing a user-defined variable that
     // is used to store the status of the thread.
     hThread = CreateThread(NULL, 0, \
     (LPTHREAD_START_ROUTINE)MyThread, (void*)&Active, \
     0, &ThreadId);
    
    mutexlock
    mutexunlock
    
    ExitThread(0); // special call to close thread
    
     // Close the thread handle
     CloseHandle(hThread);
    }
    edit:
    ok hab deine frage eigntlich nicht gelesen ... wennde sicher gehen willst kannste ja nen callback machen, zur not auch nen sleep, aber letzteres wäre nicht wirklich elegant.
     
  4. 1. Februar 2009
    Versteh ich ja alles, das mit der Critical Section und so is alles klar, aber mir gehts ums Prinzip...

    Wenn der das so im Buch abgedruckt hat muss es ja funktionieren. Meine Frage ist jetzt: WIESO?, ist es nicht möglich das bei der ersten Überprüfung innerhalb der while Schleife die Variable Active noch garnicht initialisiert ist?
     
  5. 1. Februar 2009
    ich versteh dein bedenken schon. nur macht mans eben normalerweise nicht so. jeder der diesem porblem begegnet machts dann über nan callback. falls es dich wirklich interessiert kannste dir ja mal anschaun wies im prozessor ausgeführt wird, andernfalls lös das problem richtig.
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.