.| Autor | Beitrag |
|---|---|
|
000 08.01.2007, 18:47 Felheart |
Jo :) also ich hätte 2 fragen. 1. ist es möglich das mein programm, erkennt das es beendet werden soll und schnell noch eine Funktion aufruft, bevor es abgewürgt wird ? oder besser das es schon frühzeitug erkennt das der Pc am runterfahren is und dann schon schnell ne funktion aufruft ? 2. z.b. ein CS server kann ja nicht die rückmeldung von einem Clienten abwarten, bis er mit dem nächsten cleint weitermacht, sonst hätten ja alle spieler den gleichen ping (und auch einen übelst hohen xD).... ich hab mich noch nie mit (falls es das überhaupt sein sollte) THREADS beschäftigt.... wie stell ich sowas an ? ._. -- |
|
Profil || Suche |
|
001 08.01.2007, 19:24 HammerBlade |
1. Windows sendet deinem Programm die Messages WM_QUERYENDSESSION und WM_ENDSESSION, bevor es runterfährt. Wenn man auf WM_QUERYENDSESSION passen reagiert, kann man das Runterfahren auch abbrechen. 2. Das geht mit Threads. Wie du mit Threads umgehts hängt vom Framework ab: WinAPI, MFC, Boost, Qt, wxWidgets, ... Mit Threads handelt man sich allerdings auch Probleme ein, z.B. Deadlocks und muss sich Gedanken um Sachen wie kritischer Abschnitte machen. Wenn du dich noch nicht mit Threads beschäftigt hast liest du am besten erstmal grundlegendes wie: http://de.wikipedia.org/wiki/Thread_(Informatik) --"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Dieser Beitrag wurde am 08.01.2007 um 19:28 von HammerBlade bearbeitet. |
|
Profil || Suche |
|
002 08.01.2007, 19:50 Felheart |
Windows sendet deinem Programm die Messages WM_QUERYENDSESSION und WM_ENDSESSION, bevor es runterfährt. Wenn man auf WM_QUERYENDSESSION passen reagiert, kann man das Runterfahren auch abbrechen. wie kann ich auf diese nachricht reagieren ? mach ich da ne neue (spezielle) funktion ? oder wie ? :/ --Dieser Beitrag wurde am 08.01.2007 um 19:50 von Felheart bearbeitet. |
|
Profil || Suche |
|
003 08.01.2007, 20:22 Adrian_Broher Admin |
unter win32 würdest du diese message im vom dir registrierten winproc abfangen und entsprechend das machen was du so vorhast. Aber so wie du die frage stellst wäre es erstmal interessant zu wissen was du für ein framework benutzt, was du vorhast etc pp --There is nothing wrong with high standards. It's your problem that you don't meet them. |
|
Profil || Suche |
|
004 12.01.2007, 15:09 Felheart |
genau... win32 consolen anwendung :) (WinAPI) kannst du mal nen kleinen beispielcode geben wie ich das genau mache? ach und zu den threads: gegeben sei folgendes programm: und wie beendet man threads? so ich ich es gemacht hab (mit if und while abfragen) ? oder macht man das eigentlich anders? --Dieser Beitrag wurde am 12.01.2007 um 16:15 von Felheart bearbeitet. |
|
Profil || Suche |
|
005 12.01.2007, 15:28 Kriz |
Tja, ohne die Frameworkangabe wird das nachwievor unbeantwortet bleiben (siehe #001, Punkt 2). K:R-I)Z++ Dieser Beitrag wurde am 12.01.2007 um 15:29 von Kriz bearbeitet. |
|
Profil || Suche |
|
006 12.01.2007, 16:25 HammerBlade |
So wie du Threads beendest ist es richtig, der Thread muss sich selbst beenden, in dem du ihm das signalisierts. Du kannst sie zwar mit 'BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode);' abwürgen, aber dann wird der Thread an einer unbestimmten Stelle abgewürgt. Was nicht gut ist. Deine Thread tun da jetzt nichts kritisches, aber wenn sie komplexere Sachen tun würden, könnte das sehr schlecht sein, wenn sie einfach mitten drin abgewürgt werden. Das mit den Messages von Windows ist hier so eine Sache. Dafür muss dein Porgramm einen Messageloop haben, siehe hier wie man sowas macht: MSDN: Using Messages and Message Queues Grundsätzlich braucht man für sowas ein Fenster, auch wenn dieses unsichtbar ist, da Messages immer nur an Fenster gesendet werden. Edit: "Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Dieser Beitrag wurde am 12.01.2007 um 16:53 von HammerBlade bearbeitet. |
|
Profil || Suche |
|
007 12.01.2007, 16:41 Felheart |
Ok, damit wären alle fragen geklärt vielen dank an alle :D * uhmm ich hätt doch noch ne frage.... wie starte ich den thread wieder ? und wie mach mach ich eine "Pause funktion" so das der thread anhält und und bei Dieser Beitrag wurde am 12.01.2007 um 17:05 von Felheart bearbeitet. |
|
Profil || Suche |
|
008 12.01.2007, 18:07 HammerBlade |
Mit DWORD ResumeThread(HANDLE hThread); und DWORD SuspendThread(HANDLE hThread); ginge das, aber das ist wie TerminateThread zu betrachten, es hält den Thread in einem unbestimmten Zustand an. Besser ist es das per Event (MSDN: Using Event Objects) zu machen. Hier mal ein Codesnippet dazu.
"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Dieser Beitrag wurde am 12.01.2007 um 18:10 von HammerBlade bearbeitet. |
|
Profil || Suche |

