AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateProcess in thread mit eigener messageloop?
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcess in thread mit eigener messageloop?

Ein Thema von Memnarch · begonnen am 18. Dez 2013 · letzter Beitrag vom 20. Dez 2013
 
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

CreateProcess in thread mit eigener messageloop?

  Alt 18. Dez 2013, 09:08
Moin allerseits,
Ich habe folgendes Problem:

per CreateProcess starte ich ein Programm, wie z.B. powershell(v1) mit einem gegebenen script. Im Startupinfo record gebe ich sw_hide an, damit die Konsole der Powershell nicht angezeigt wird.

Wenn dass das einzige ist, was ich mache klappt alles wunderbar. Wird z.B. im Powershell-Script ein Dialog angezeigt, funktioniert dieser tadellos.

Wenn ich aber blockierend auf das beenden des Prozesses warte, dann geht das nicht mehr. Warum? Durch SW_Hide bin ich aus irgendeinem Grund jetzt plötzlich für die abarbeitung der messages zuständig. Warte ich blockierend werden natürlich keine messages abgearbeitet und die Dialoge aus Powershell gehen nicht.Im gegensatz dazu: Per SW_Show erstellt die Powershell ihr hauptfenster und mein Prozess darf blockend warten, wärend alles weitere ohne Probleme funktioniert.

Ich möchte aber auch nicht, das grundsätzlich Nachrichten(wie die für VCL) abgearbeitet werden(i.e. Application.processmessages).

Meine Idee wäre dann gewesen, CreateProcess in einem anderen Thread auszuführen, der praktisch dann die Arbeit zugesprochen bekommt und der Hauptthread kann blockend warten.

Bisher war dies aber nicht von Erfolg gekrönt. Ich habe es per unsichtbarem Fenter im Thread als auch generel per pek/translate/dispatchmessage vor und danach(in einer loop) versucht, um die Messagequeue im Thread zu erstellen und am leben zu erhalten. Allerdings wählt sich Windows/Createprocess immer die Hauptqueue aus. Solange da kein Application.ProcessMessages im Hauptthread steht, läuft da nichts mit Dialogen.

Ich möchte vorzugsweise CreateProcess nutzen, um STDIN/Out/Err auswerten/nutzen zu können.

Hat jemand eine Ahnung, was hierbei die Ursache sein könnte?

EDIT: interressanter Nebeneffekt: Beende ich meien Applikation und die Powershelll bleibt am leben, so funktioniert danach der Dialog. anscheinend übernimmt die Powershell dann wieder die Arbeit?

Grüße
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch (18. Dez 2013 um 09:25 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz