Treads von aussen pausieren.(nicht mit POSIX)
-
Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Threads anhalten ist ganz schlecht! Da erzeugst Du möglicherweise Situationen in denen sich das ganze Programm aufhängt (siehe mein Blog).
Mach eine vernünftige Synchronisierung! Wenn es innerhalb des gleichen Prozesses ist mittels Enter/LeaveCriticalSection sonst mit Mutexe (CreateMutex).
-
Danke,
da ich in unserer Hochschul Bibliothek das Buch Microsoft Windows Programming für Experten gefunden habe, und mich mal über Threads schlau gelesen habe, habe festgestellt, das das ein super möglichkeit ist.Danke für die Antworten
Peer
-
Dazu nochmal ne Frage @Jochen:
Kann man seinen Thread mit Sleep für 'unbestimmte Zeit' ins Land der Träume schicken, oder sollte man das auch vermeiden ?Mal ein überschaubares Beispiel:
Ich verwende in meiner Thread-Prozedur (in etwa) folgende Syntax, um zu prüfen, ob ein bestimmter (länger andauernder) Vorgang vom Benutzer pausiert wurde:unsigned int __stdcall ThreadProc(void* pvThreadData) { // ... // Definition und Initialisierung von pData ... // ... if(pData->fPaused) while(pData->fPaused) Sleep(500); // ... _endthreadex(0); return (0); }Der Grund für die Schleife mit dem 'Sleep' ist folgender:
Wenn ich den Thread insich schlafen lege (mit Sleep), steht den anderen Threads und Prozessen des Systems
doch mehr Rechenzeit zur Verfügung... . Der Zeitwert (hier 500 ms) darf natürlich nicht zu groß sein, da das Programm
bzw. der Thread sonst verspätet fortgesetzt wird
. Kann ich das so machen ? ... Danke schonmal für Antwort
.
-
CodeFinder schrieb:
Kann ich das so machen ?
kannste so machen. zusätzlich könnteste nach aussen kommunizieren, wenn die pause zu ende ist.
-
ist pData global? wenn ja, wird es so problematisch. Da der Thread sich nicht schlafen legt. Der zweite Thread aber direkt danach auf der Zeitscheibe dran ist, und arbeit dann evtl auf nimmt. So sind dann beide Threads am Laufen.
Wenn du so was machen wills, solltest du Kritische Abschnitte oder Spinnlocks(vorsicht rechen intensiv) verwenden.Gruß Peer
-
CreateEvent, SetEvent, WaitForSingleObject, CloseHandle
-
CreateEvent, SetEvent, WaitForSingleObject, CloseHandle
jetzt noch ein kleines Beispiel, oder ein Link, und jeder könnte damit schnell was anfangen. Aber immerhin besser als RTFM

-
@net: Jops super, danke
.@Nightstorm: Nein ist nicht global, das steht da aber auch: "Definition und Initialisierung von pData ...". Und auf Deadlocks hab ich geachtet.
@cswc: Jop, kenn ich, is ja Std...aber danke
.
-
@Nightstorm:
lol, wieso kann man denn damit nix anfangen ?
-
wenn man diese dinge noch nie genutzt hat? dann kann man die sich raussuchen aus dem MSDN, aber ein link, oder Beispiel hilft da meist etwas schneller. Wenn ich die MFC´s auswendig kennen würde, würde ich hier keine Fragen stellen sondern beantworten.

-
-
Nightstorm schrieb:
Wenn ich die MFC´s auswendig kennen würde, würde ich hier keine Fragen stellen sondern beantworten.

*grinz*
-
Danke net
-
Such mal unter google nach 'thread winapi'. Da wirste von Info's erschlagen
.
-
so... da muss ich aber alles einzeln durchgucken..und auswerten, ob es mir weiterhilft. Und evtl. häte ja jemand einen vernünftigen quicklink gehabt. Wenn ich mal was weiß, geb ich am liebsten gute Links weiter. Das Google alles weiß, sollte man wissen als Informatikstudent. Wenn man weiß wie ein Forum funktioniert, weiß man auch wie Google funktioniert.

-
Nightstorm schrieb:
[...]Das Google alles weiß, [...]
[...]