Beende einen Process bei MFC
-
hello zusammen,
Ich habe einigen Processe mit WinExec() erzeuget.Dieser Process machte nur den Aufgabe für einige Infoemation messen.Dadurch muss ich in belibigen Zeit den erzeugte Process beenden.
Wie kann ich damit weiter machen?
Es gibr auch ähnlichen Funktionen wie WinExec() bei MFC??MFG
-
Normalerweise genügt es WM_CLOSE an den Prozess zu senden, wenn er eine GUI hat. Dazu benötigst Du aber dessen Fenster-Handler.
Pech hast Du wenn es eine Konsolen-Anwendung ist.Wenn der Prozess von Dir ist, dann würde ich eine spezielle Nachricht einbauen, die den Prozess sich selbst Beenden lässt.
BTW: ShellExecuteEx ist besser zum Starten eines solchen Prozesses geeignet. Damit bekommst Du auch das Fenster Handle. WinExe ist obsolet.
-
Für MFC gibt es keine saubere Lösung einen fremden Prozess zu terminieren.
Aussagen wie
Martin Richter schrieb:
...genügt es WM_CLOSE an den Prozess zu senden...
machen einen Misch-Masch-Code aus MFC und fast reiner WinApi und sind wohl kaum mit einer professionellen Programmierweise vereinbar.
Die günstigste WinApi-Methode, einen Prozess zu generieren und nach festgelegter Zeit zu terminieren, wäre die Verwendung von CreateProcess. Das Attribut hProcess in LPPROCESS_INFORMATION verwendest du dann zusammen mit der Methode TerminateProcess(), um den gerade angelegten Prozess zu killen.
Wichtig: beide Handles in LPPROCESS_INFORMATION sind nach erfolgreichem CreateProcess mit CloseHandle zu schließen!
-
a schrieb:
Für MFC gibt es keine saubere Lösung einen fremden Prozess zu terminieren.
Aussagen wie
Martin Richter schrieb:
...genügt es WM_CLOSE an den Prozess zu senden...
machen einen Misch-Masch-Code aus MFC und fast reiner WinApi und sind wohl kaum mit einer professionellen Programmierweise vereinbar.
Was soll das für ein Mischmasch sein?
Das hat doch mit MFC oder WinApi nichts zu tun. Die MFC ist doch nur ein Wrapper.Und was soll der Quatsch das das senden von WM_CLOSE für einen professionellen Programmierer bei Verwendung der MFC unvereinbar ist?

a schrieb:
Die günstigste WinApi-Methode, einen Prozess zu generieren und nach festgelegter Zeit zu terminieren, wäre die Verwendung von CreateProcess. Das Attribut hProcess in LPPROCESS_INFORMATION verwendest du dann zusammen mit der Methode TerminateProcess(), um den gerade angelegten Prozess zu killen.
Wichtig: beide Handles in LPPROCESS_INFORMATION sind nach erfolgreichem CreateProcess mit CloseHandle zu schließen!
Dieser Tipp ist wohl absolut unverantwortlich. TerminateThread und TerminateProcess gehörenzu den absoluten NoNo's!
-
danke .....
Ich habe lange zeit fuer meine Messprogramm weiterprogrammiert.Ich habe einige komische Problem getroffen.
Ich kann nicht den LIB Path(aktiviert den DSP devie)eintragen. Wenn ich den alten Programm uebernommen.Kann ich nicht die Funktion AfxBeignThread() starten.
Endelich habe ich einen Idee,ich schreiben einige Semparate WinKosole Programm. Dadurch kann ich einfach durch GUI-Oberflaechen starten.Persoenlich fand ich,dass nicht so Profi ist.Aber dass ist die guestige Loesung fuer mich zur Zeit.
Ich Probiere selbst mal den Methoden,die ihr mir gegeben hat.
Ich bedanke mich noch fuer Martin Richter.Er hat auch bei AfxBeginThread() fuer mich viele Unterstuezung schon gegeben.
Auf jeden Fall.Muss ich weiterprogrammiren,und es kommt sowieso noch einige Problem .
