Threading
-
Hi,
bislang hab ich immer mit der CWinThread Klasse gearbeitet und hab mir die immer angelegt wenn ich Sachen über einen Thread laufen lassen wollte.Ich muss nun aber mit mehreren Threads (Mutlithreading) arbeiten.
Dabei soll immer ein Part Code im Thread abgewickelt werden.Wie kann ich nun Threads Codetechnisch zur laufzeit erstellen ohne mir diese vor über die CWinThread Klasse anzulegen?
Ich mein in etwas so:
/* Thread erstell code ...blabla */ do { something... }while(nothing) /* Thread ende*/Versteh ihr was ich meine?
Vielen Dank
Gruß
christian
-
Also mit der MFC, dann schau dir mal AfxBeginThread an.
Ohne MFC dann CreateThread.Allerdings muss ich sagen dass ich nicht ganz begreife wo dein Problem, vor allem mit dem CWinThread ist. Bzw. was dieses Objekt mit "nicht zur Laufzeit" zu tun hat.
Grüssli
-
AfxBeginnThread ist schon klar....nur hab ich mir sonst ja eine Klasse von CWinThread angelegt wodrin ich meinen Code gehandelt habe..
Ist es jetzt so das diese Klasse mir nur einen Thread darstellt?
Oder wird jedesmall ein seperater Thread aufgerufen wenn ich ihn mittels AfxBeginnThread starte??Wenns so sein soltle wie differenziere ich dann wenn ich auf einen Thread zugreifen möchte.. ?
-
Jeder AfxBeginThread-Aufruf gibt dir einen Zeiger auf ein neues CWinThread Objekt zurück, da ein neuer Thread gestartet wurde. Daher versteh ich nicht so ganz dein Problem. Wenn du einen Thread mit einem von CWinThread selbstabgeleitet Klasse gestartet hast, dann hast du doch auch für jeden Thread ein neues CWinThread Objekt anlegen müssen.
Und so unterscheidest die Threads dann ja auch, da jeder Thread das eigene Objekt hat.*Mühe hat, das Problem zu verstehen*
Grüssli
-
ich versteh nicht wo ich meinen thread code hinpacke wenn ich mir nicht vorher eine Klasse ableite...
Ich denke es ist ein Verständigungsproblem meinerseits..

Mhhh mit anderen worten :
static UINT Thread(LPVOID Pparam) { AfxMessageBox("TEST"); return 0; }das wäre mein code der im thread ausgeführt wird..
und jedesmal wenn ich
CWinThread* test; test = AfxBeginThread(Thread,NULL,0,CREATE_SUSPENDED);aufrufe wird der thread (als neuer thread) aufgerufen richtig??
-
Für jeden AfxBeginThread Aufruf wird ein neuer Thread erstellt. Die alten Threads bleiben, sofern sie sich nicht schon selbst beendet haben, bestehen.
Allerdings ist dann jeder Thread gestoppt, wegen dem CREATE_SUSPENDED und du musst ResumeThread, des zurückgegeben CWinThread Objekts, aufrufen, um den Thread wieder zu starten, bzw. überhaupt zu starten.Grüssli