Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit Threads

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 ]
000
16.03.2004, 16:02 Uhr
~iBOT
Gast


Hi,
wie kann ich zwei Threads parallel laufen lassen und sowie sich einer von fertig ist diesen wieder neu starten?? Ich weiß nicht wer zuerst fertig ist und nen wait kann ich auch nicht machen weil der einen dann immer warten muß bis der andere fertig ist!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.03.2004, 16:06 Uhr
typecast
aka loddab
(Operator)


Welches Betriebsystem?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.03.2004, 16:08 Uhr
~iBOT
Gast


JaJa da werd ich wieder verschoben!
Windows
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.03.2004, 16:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


soll man zwar wohl nich so machen aber ich synchronisier die threads immer mit flags...
hat bisher immer einwandfrei gefunzt....

ach so zu deinem immer wieder neu starten. einfach checken ob es den anderen thread noch gibt und wenn nicht neu starten. Geht glaub ich unter windows z.b. mit GetExitCodeThread...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 16.03.2004 um 16:11 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.03.2004, 16:10 Uhr
typecast
aka loddab
(Operator)


Ja der Thread geht zur WinAPI. Threads lassen sich leider mit ANSI C/C++ nicht realisieren.
->
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.03.2004, 16:22 Uhr
~iBOT
Gast


zu 1. Okay! Wie funtzt denn das mit den Flags?
zu 2. Meinst du die beiden GetExitCode in einer Schleife mit 2 if abfragen überprüfen und je nach bedarf neu starten?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.03.2004, 16:28 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zu 1) na das ist wie mit schaltern du musst dir selber welche definieren und dann immer abfragen. das hängt insbesonder davon ab wie genau dein problem ist.

2) ja allerdings noch ein sleep einbauen sonst fährt die prozessorlast gegen 100% was ja wohl nicht gewünscht ist....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.03.2004, 16:51 Uhr
~iBOT
Gast


Das mit dem sleep ist mir schon bekannt!
Aber was nicht funtzt ist in einer Klasse zwie funktionen in zwei Threads auf zurufen! Bzw. es klappt nicht mal mit einer!
Fehler:

C++:
CCsystem.cpp(12) : error C2664: 'CreateThread' : Konvertierung des Parameters 3 von 'unsigned long (void *)' in 'unsigned long (__stdcall *)(void *)' nicht moeglich
        Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein


definition von einer Funktion:

C++:
private:
    DWORD WINAPI internetJobProcess(LPVOID lpParam);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.03.2004, 17:08 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


naja du hast vermutlich 3 threads
der erste müsste der hauptthread sein von dem du die beiden anderen später (z.b. mittels flags) steuern kannst... irgendwie musst du ja was vorhalten das du aus dem dilemma wenn der eine thread tot ist startet ihn sofort der andere ja rauskommen an sonsten ist das ja fast virusartig wenn du es mit prozessen machen würdest....

mal ungetestet und einfach so ins forum gehackt...
im header deiner klasse musst die ja irgendwie sowas deklarieren

C++:
static DWORD ThreadProc1(LPVOID);
static DWORD ThreadProc2(LPVOID);
HANDLE h_Thread1;
HANDLE h_Thread2;



dann brauchst da ja noch deine beiden treadproceduren

C++:
DWORD MyClass::ThreadProc1(LPVOID lparam){
...//tralala1 hier packst du ja irgenwie deine endlosschleife rum
MyClass*p = ((MyClass*)lparam);
DWORD dw;
while(!p->abbruchflag){... oder wie auch immer die bedingung ist
if(STILL_ACTIVE!=GetExitCodeThread(h_Thread1,&dw))
p->h_Thread2=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)p->ThreadProc2, (LPVOID)p->this, 0, NULL);

Sleep(100);
}

}

DWORD MyClass::ThreadProc2(LPVOID lparam){
...//tralala2analog zu prozedur1
}



hab sowas auch noch nicht gemacht aber es müsste beim starten ja reichen wenn du einen thread anstösst weil der ja automatisch dann den zweiten startet...


C++:
also irgendwie im konstruktor oder wo auch immer dein thread starten soll
h_Thread1=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc1, (LPVOID)this, 0, NULL);



--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.03.2004, 17:19 Uhr
~iBOT
Gast


Das ist schon mal super!
Aber ich bekomme beim thread aufruf in der Klasse immer den Fehler von oben!
 
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: