Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » multithreading unter dos

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
16.09.2004, 13:07 Uhr
ao

(Operator)



Zitat von lubU:
naja also meines wissen gibt es unter dos multithreading.



Ich glaube, du verwechselst da was. Das, was du DOS nennst, ist die Textkonsole von Windows. DOS ist ein veraltetes "Betriebssystem", das von Haus aus tatsächlich kein Multithreading hat.

Du willst ein Konsolenprogramm mit Multithreading, und natürlich geht das.

Weshalb es abstürzt, kann ich nur raten; vielleicht gibt es Probleme dadurch, dass deine beiden Threads konkurrierend auf die Tastatur (getch) und den Bildschirm (gotoxy und printf) zugreifen. Möglicherweise sind diese Funktionen nicht reentrant, d.h. nicht dafür gemacht, dass sie von zwei Threads gleichzeitig ausgeführt werden.

Abhilfe: Alles in einem Thread erledigen bzw. in einer Hauptschleife in main ().

Oder, wenns ein Multithreading-Experiment sein soll, dann musst du die Reentranzprobleme lösen. Multithreading-Programmierung ist sehr interessant, aber nicht trivial. Vielleicht solltest du, bevor du zu programmieren anfängst, noch etwas lesen, bis dir klar ist, was "Reentranz" und "Shared Resources" sind und wie man mit den Mitteln der "Interprocess Communication" threadsicher programmiert.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
16.09.2004, 16:26 Uhr
~lubU
Gast


hi ao,

ok da hab ich wohl was durcheinander gebracht mit DOS und Konsole.
Naja ich bin zwar noch nicht sehr weit aber sicherlich kein anfänger mehr.


"Interprocess Communication" brauch ich hier ja nicht.
das kommt dann erst wenn ich den Ball hab der hin und her fliegt.
die 2 balken prozesse sind ja völlig unabhängig voneinander.

ich schätze einfach dass das keyboard dass nicht kann (2 inputs auf einmal)
aber das muss doch irgendwie lösbar sein....

wäre dankbar wenn ich en paar tipps kriegen würde wie man an so eine problematik herangehen soll...

danke,

lubU
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
16.09.2004, 16:55 Uhr
ao

(Operator)



Zitat von ~lubU:
"Interprocess Communication" brauch ich hier ja nicht.

Doch.

Zitat:
ich schätze einfach dass das keyboard dass nicht kann (2 inputs auf einmal)

Genau das ist Reentranz bzw. die fehlende Fähigkeit dazu.

Du könntest z.B. einen dritten Thread einrichten, der als einziger das Keyboard abfragt. Wenn er eine Taste erkennt, gibt er einem den beiden User-Threads ein Signal.

Das könnte man für allererste Versuche mit einer globalen Variablen machen, die man einfach auf einen anderen Wert setzt. Würde wahrscheinlich so halbwegs funktionieren, aber nicht wirklich sicher sein, weil der empfangende User-Thread die Variable danach wieder zurücksetzen muss; es kann also passieren, dass Sender und Empfänger sich gegenseitig die Nachrichten kaputtschreiben.

Um das sicher und verlustfrei hinzukriegen, hat jede Multithreading-Bibliothek irgendwelche Mechanismen (Semaphor, Pipe, Mailslot, ...). Das ist die Interprocess-Kommunikation, die ich meinte, und ohne die kein MT-Programm auskommt.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: