[C/C++] Multithreading

Dieses Thema im Forum "Programmier Tutorials" wurde erstellt von t-low, 1. Januar 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 1. Januar 2008
    Multithreading

    Nachdem ich mich vor einem viertel jahr mit multithreading befassen wollte und gemerkt hab, dass es kein brauchbares deutsches tut dafür gibt, will ich jetzt versuchen ein eigenes zu schreiben...
    nehmen wir an, wir wollen ein programm schreiben, dass zugleich einen smiley von links nach rechts bewegt und darauf wartet, dass eine taste gedrückt wird, die das programm beendet.(in der konsole)
    info:
    smilies haben den ASCII code 1 bzw 2.
    die erstellt man also mit
    Code:
     char smiley = 1; //bzw 2, der ist davon das negativ 

    also, als erstes einige dateien includen
    Code:
    #include <conio.h> // getch 
    #include <process.h> // wird fürs multithreading gebraucht
    #include <windows.h>// windoof
    
    dann deklarieren wir die funktionen, die auf den tastendruck warten und die den smiley bewegt

    die funktionen müssen vom typ void sein UND als parameter einen nullzeiger haben.
    Code:
    void WarteAufEnde (void *);
    void BewegeSmiley (void *);
    
    dann müssen wir main festlegen und daraus die threads starten
    dafür benutzt man die in process.h definierte funktion _beginthread(void (__cdecl *) (void *),
    unsigned, void *);
    die funktion erwartet als erstes parameter einen zeiger auf die funktion (der funktionsname ohne ()), die sie starten soll und als drittes parameter einen nullzeiger
    Außerdem deklarieren wir noch globale variablen;
    Code:
    bool repeat = TRUE; 
    DWORD result;
    HANDLE h; //handle 
    
    int main () {
    h = GetStdHandle( STD_OUTPUT_HANDLE ); //handle zum audgeben von text
    _beginthread(WarteAufEnde, 0, NULL);
    _beginthread(BewegeSmiley, 0, NULL); // threads starten
    while (repeat) /* repeat ist global deklariert und alle funktionen können darauf zugreifen, wir benutzen sie um zu testen, ob das programm schon unterbrochen wurde*/
    {
    
    
    
    Sleep(100);
    } 
    _endthread(); // threads beenden
    return 0;
    }
    
    // dann funktionen definieren
    void WarteAufEnde (void * )
    {
    
    getch(); //wenn eine taste gedrückt wird
    repeat = false; //unterbricht er alle schleifen durch repeat = false;
    
    
    
    }
    
    
    
    
    void BewegeSmiley (void *) {
    char smiley = 2, leerstelle = ' '; // ich find den 2. smiley schöna
    COORD pos;
    pos.X = 1;
    pos.Y = 1;
    
    while (repeat) {
    WriteConsoleOutputCharacter( h, &leerstelle, 1, pos, &result ); // den alten smiley überschreiben 
    pos.X++;
    if (pos.X == 80)
    pos.X = 1;
    WriteConsoleOutputCharacter( h, &smiley, 1, pos, &result ); //smiley an der neuen position ausgeben
    
    
    Sleep(200); //200 millisekunden warten
    
    }
    
    
    }
    
    
    
     
    Wenn ihr das kompliliert, wartet das programm, bis ihr eine taste drückt und beendet sich dann.

    wenn ihr einer funktion parameter übergeben wollt, dann geht das über den dritten parameter von _beginthread(); dafür muss ern in einen voidzeiger umgewandelt werden
    Code:
    #include <iostream>
    #include <process.h>
    using namespace std;
    void zeige (void *);
    int main () {
    int i = 250;
    
    _beginthread(zeige, 0, (void *) i );
    
    system("PAUSE");
    return 0;
    }
    void zeige(void* i)
    {
    cout << (int) i
     << "\n";
    
    }
    

    ich hoffe, ihr habt das multithreading mit diesem tut verstanden. ich hab die programmbeispiele ausprobiert, es kann aba trottzdem sein, das da einfehler ist. wenn ihr einen entdeckt, fragen habt, etc schreibt mir eine pm

    t-low
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.