MainWindow lässt sich nicht schliessen nach benutzung von CreateProcess
-
Hallo Zusammen,
ich habe seit geraumer Zeit ein Problem mit dem C++ Builder. Ich starte einen zweiten Process im meinem Programm der auch einwandfrei läuft und benutze 2Pipes zur komunikation. Aber sobald ich mein MainWindow schliessen will hängt sich das Programm auf
Dies geschieht jedoch nur wenn ich das Fenster an der gleichen Stelle stehen lasse wie es nach dem Start der EXE vom System Positioniert wird. Wird der 2te Process nicht gestartet so kann man wie üblich die Applikation beenden.

Verschiebe ich jedoch das Fenster nur schon um einen Pixel (x od. y achse) so lässt sich das Programm auch nach dem Start des 2 Processes ganz einfach durch das anklicken des "X" oben rechts im Fenster schliessen. Hat da einer eine Idee was das ganze auslösen könnte

void TForm1::CreateChildProcess() { PROCESS_INFORMATION piProcInfo; STARTUPINFO siStartInfo; ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) ); // Set up members of STARTUPINFO structure. ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) ); siStartInfo.cb = sizeof(siStartInfo); siStartInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; siStartInfo.wShowWindow = SW_HIDE; siStartInfo.hStdOutput = Pipe->getHandleChildStdoutWr(); siStartInfo.hStdInput = Pipe->getHandleChildStdinRd(); siStartInfo.hStdError = Pipe->getHandleChildStdinRd(); // Create the child process. if(!CreateProcess(NULL, Form1->ediComandline->Text.c_str(),// command line NULL, // process security attributes NULL, // primary thread security attributes true, // handles are inherited NORMAL_PRIORITY_CLASS |DETACHED_PROCESS, // creation flags NULL, // use parent's environment NULL, // use parent's current directory &siStartInfo, // STARTUPINFO pointer &piProcInfo)) // receives PROCESS_INFORMATION { throw Exception("Create process failed"); } CloseHandle(piProcInfo.hProcess); CloseHandle(piProcInfo.hThread); SetForegroundWindow(this->Handle); }Besten Dank
Mike
-
Wie ich sehe hat niemand verstanden was ich da geschrieben habe
Nun frage ich mal so.Was passiert wenn ich das Fenster, das sich nach dem Doppelklicken auf die Exe Datei öffnet, mit der Maus nur schon um einen Pixel verschiebe?
Denn wenn ich das zuerst mache und dann das Programm benutze und am schluss es beende so beendet es ganz normal. Verschiebe ich es nicht so kann es nach dem Start vom zusätzlichen Prozess nicht mehr beenden.Ist es so evtl. klarer was ich meine?
Ich wäre übrigens auch an lösungsansätzen interessiert. Es muss ja nicht sofort die richtige antwort auf mein Problem sein.

CU Mike
-
Ich muss also schon sagen dass es recht gut währe wenn man wenigstens irgendwo sehen könnte ob jemand den Beitrag gelesen hat oder nicht. So weiss man einfach nicht was sache ist.

-
Benutz die Suchfunktion und lass dir deinen eigene Beitrag anzeigen, dann siehst du auch die Zahl der Aufrufe.
-
Hallo
gelsen habe ich deinen Beitrag schon mehrmals, aber so richtig verstanden, was da laeuft habe ich noch nicht
was uebertraegst du mittels Pipes (moeglicherweise machst du das was wenn du dein Position veraenderst ?
MfG
Klaus
-
Nun ja ich versuchs nochmals.
Fall 1:
Ich starte mein Programm ohne den zusätzlichen Process und ich habe keine Probleme.Fall 2:
Ich starte mein Programm mit dem zusätzlichen Process und ich kann mein Hauptprogramm nicht mehr schliessen weil sich mein Programm dann aufhängt.Fall 3:
Ich starte mein Programm verschiebe das Fenster um einen oder auch mehr Pixel, und starte erst dann den zusätzlichen Process und ich kann mein Hauptprogramm ganz normal schliessen.Ich habe die Software um 14:00h mal auf einem anderen Rechner gestartet und siehe da, dort funktioniert das Schliessen der Applikation ganz normal. Egal ob ich nun das Fenster verschiebe oder nicht, auch wenn der zusätzliche Prozess läuft. Das hätte ich eigendlich auch auf meinem Rechner erwartet.

Evtl. ist das Hyperthreadig auf meinem Rechner das Problem.
Ist es jetzt verständlicher?
Hat jemand ne idee was das verursachen kann???

Gruss
Mike