Vollständige Version anzeigen : [C/C++] Multithreading


t-low
01.01.2008, 19:10

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 char smiley = 1; //bzw 2, der ist davon das negativ


also, als erstes einige dateien includen

#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.

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;

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

#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

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Ähnliche Themen zu [C/C++] Multithreading
  • [Code] [Delphi] Multithreading
    hi, ich suche eigendlich nur die einfachste methode wie ich die prozedur eines buttonklicks in einem eigenen thread ausführen kann. ich hab mir dazu schon ein paar tuts angesehen. allerdings haben die mir nur mäßig dabei geholen^^ [...]

  • [Java] Multithreading
    hat sich erledigt [...]

  • [.NET] Multithreading Problem
    Ich hab den Thread wieder geöffnet, weil ich ein neues Problem habe. Ich möchte innerhalb des Threads einen Output haben. Hierzu habe ich den Code zum sicheren schreiben aus einem Thread aus der MSDN Adaptiert: Public Sub Log(ByVal text As String) ' InvokeRequired required compares [...]

  • [VisualBasic] [.Net] Multithreading
    Ich will in nem programm von mir ne liste an daten abarbeiten und benutz dazu threads: nur wenn die liste 100 eintrage hatt wollte ich ungerne auch 100 threads benutzen daher meine frage: ich will das es z;b. nur 3 threads gib die so arbeiten: Thread 1: bearbeite arrURL(0) Thread 2: bearbeite a [...]



raid-rush.ws | Imprint & Contact pr