Multitasking in VC++

pepsi_gx

Erfahrenes Mitglied
Hallo Forum,

eine Aufgabe hab ich zu lösen. Ich hab eine Liste von Funktionen auszuführen. Um die Durchlaufzeit zu sparen, möchte ich Multithreads für sie erstellen. Im Code möchte ich die Anzahl der durchlaufenden Threads auf 5 einschränken, d.h., wenn einer davon fertig ist, kommt der sechste sofort in die Schlange und so weit und so fort, bis alle Threads fertig sind.

Ein bisschen Gedanken darüber hab ich mir gemacht, u. zw. auf diese Art und Weise:

C++:
int main(int argc, _TCHAR* argv[])
{
    //Erstellt Threads für mehrere Funktionen
    HANDEL hThread[0] = CreateThread1(ThreadFunc1());
    HANDEL hThread[1] = CreateThread2(ThreadFunc2());
    HANDEL hThread[2] = CreateThread3(ThreadFunc3());
    HANDEL hThread[3] = CreateThread4(ThreadFunc4());
    HANDEL hThread[4] = CreateThread5(ThreadFunc5());

    for (int index=0; index < 300; index++)
        ...//macht irgendwas für den Mainthread

    // Auf die Threads warten, bis sie fertig sind
    WaitForMultipleObjects(5,
                                               hThread,  
                                               TRUE,
                                               INFINITE);

    // Alle Threads sollten beendet sein
    for (int index = 0; index < 5; index++)
        CloseHandle(hThread[index]);

    printf("\nAlle Threads beendet.\n");

    return 0;
}

ThreadFunc1(Para1)
{
...
}
ThreadFunc2(Para2)
{
...
}
ThreadFunc3(Para3)
{
...
}
ThreadFunc4(Para4)
{
...
}
ThreadFunc5(Para5)
{
...
}
//weitere ThreadFunc
...

Wie man sehen kann, wird diese Idee "Puffer für 5 Threads gleichzeitig" von mir nicht in der Main() umgesetzt, was meine erste Frage ist.

Außderdem finde ich die sequentielle Schreibweise für unterschiedliche ThreadFunc in der Main() nicht schön, muss man 5mal CreateThread() aufrufen oder gibt es vielleicht bessere Ideen(z.B. in einer Schleife)?

Das ist meine erste Aufgabe, wobei ich gerne Multitasking in VC++ kennenlernen möchte. Daher sind mir eure Hinweise bzw. Untertützung besonders hilfreich.

PS: ich hab selbst auch schon wenigstens über das Thema recherchiert, hier den Link den ich gefunden hab kann vielleicht auch interessant sein. Es ist jedoch für mich eher allgemein und theoretisch, deswegen wende ich mich mittlerweile lieber dem Forum zu.

LG
pepsi_gx
 
Mein Tipp: Verwende kein Wait. Lasse Threads und Hauptprogramm mit Events kommunizieren, dann kannst du damit auch z.B. Funktionsergebnisse übermitteln.

PS: Warum schreibst du HANDEL und nicht BACH? :-)
 
Mein Tipp: Verwende kein Wait. Lasse Threads und Hauptprogramm mit Events kommunizieren, dann kannst du damit auch z.B. Funktionsergebnisse übermitteln.

Wie schon gesagt bin ich in diesem Bereich ein echter Newbie. Könntest du mir ein konkretes Beispiel mit Events beibringen?


PS: Warum schreibst du HANDEL und nicht BACH?

Von BACH hab ich keine Ahnung. Ich hab den Link den ich oben erwähnt hab durchgelesen und danach probiert. Der Autor hat nämlich von HANDEL geredet, den ich auch übernommen hab. Wenn unbedingt, warum BACH?

Danke und Bis bald!

pepsi_gx
 
Zurück