AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WaitForSingleObject

Ein Thema von ONeill · begonnen am 2. Apr 2012 · letzter Beitrag vom 5. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
ONeill

Registriert seit: 17. Nov 2011
28 Beiträge
 
#1

WaitForSingleObject

  Alt 2. Apr 2012, 20:47
Hallo Leute,

mal wieder ne eher kleine Frage mit großen Auswirkungen
Ich habe ein kleines Programm, welches bisher nicht mehr tut als ein paar Befehle an Androidspezifische Kommandozeilenprogramm (adb, fastboot) zu schicken.
Das läuft auch alles ganz klasse. Damit sich das Programm nicht komplett aufhängt, nur weil die fastboot.exe (Androidprogramm) auf ein Gerät wartet, habe ich folgende Line hinzugefpgt:
Code:
repeat
          WaitHandle := WaitForSingleObject(procInfo.hProcess, 200);
          Application.ProcessMessages;
        until application.terminated or (WaitHandle <> WAIT_TIMEOUT);
Das klappt bei adb.exe auch wunderbar, nur leider nicht bei der fastboot.exe, da die anscheinend weiterhin als "aktiv" gilt.
Nun ist meine Frage, wie kann ich das Programm trotzdem nach max. 20 Sekunden beenden, damit das Programm dann eine Fehlermeldung ausgeben kann?
Ein Lösungsansatz wäre zum Beispiel während der Ausführung zu prüfen ob ein bestimmter Text als Rückgabe aus der Kommandozeile kommt (wait for device). Allerdings weiß ich nicht, wie man das mit Delphi realisiert während der Ausführung das Ergebnis zu bekommen (wahrscheinlich nicht möglich )

Bin für jede Hilfe dankbar, auch wenn ich mal wieder ggf. Tomaten auf den Augen habe

Geändert von ONeill ( 2. Apr 2012 um 20:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: WaitForSingleObject

  Alt 2. Apr 2012, 20:49
200 Millisekunden sind keine 20 Sekunden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ONeill

Registriert seit: 17. Nov 2011
28 Beiträge
 
#3

AW: WaitForSingleObject

  Alt 2. Apr 2012, 20:54
Jap, da hast du natürlich Recht (das meinte ich mit den Tomaten auf den AUgen ) ALlerdings müsste sich ja die fastboot.exe dann noch schneller schließen, was die ja schon gar nicht tut. Ist also eher jetzt erstmal ein schönheitsfehler
Trotzdem danke für den Hinweis.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: WaitForSingleObject

  Alt 2. Apr 2012, 21:03
Siehst du sie denn noch im Taskmanager in der Prozessliste? Und wird die fastboot.exe auch direkt von deinem Prozess gestartet? ist das Prozesshandle gültig?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ONeill

Registriert seit: 17. Nov 2011
28 Beiträge
 
#5

AW: WaitForSingleObject

  Alt 2. Apr 2012, 21:09
Jap, die läuft ja auch vor meinen Augen ohne Probleme weiter, so wie es sein soll. Allerdings wird eben der Prozess nicht beendet.

Aber ich hatte nun wirklich Tomaten auf den Augen. Ich habe es nun wie folgt gelöst:
Code:
repeat
          WaitHandle := WaitForSingleObject(procInfo.hProcess, 2000);
          Application.ProcessMessages;
          closed := closed+1;
        until application.terminated or (WaitHandle <> WAIT_TIMEOUT) or (closed = 10);
        if closed = 10 then
        begin
          killtask('fastboot.exe');
          killtask('adb.exe');
        end
Also sprich: ich habe einfach einen Zähler eingebaut, der sich erhöht. Wird dort eine gewisse Höhe erreicht, wird der Prozess einfach beendet.

Ist das so auch ressourcenschonend?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#6

AW: WaitForSingleObject

  Alt 2. Apr 2012, 21:14
Warum benutzt du zum Beenden der Prozesse nicht gleich das eh schon vorhandene Handle in procInfo.hProcess ? Einen Prozess mit seinem Namen zu töten, ist eine ganz dumme Idee, wenn sich noch andere gleichnamige Prozesse auf dem System tummeln...

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: WaitForSingleObject

  Alt 2. Apr 2012, 21:17
Ich glaube, das wird langsam zum Running Gag. Auch 2.000 Millisekunden sind keine 20 Sekunden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#8

AW: WaitForSingleObject

  Alt 2. Apr 2012, 21:21
@Luckie: 10 * 2000

ressourcenschonend ja, aber muß es denn gleich in einem Mord (Kill) enden?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ONeill

Registriert seit: 17. Nov 2011
28 Beiträge
 
#9

AW: WaitForSingleObject

  Alt 4. Apr 2012, 21:05
Das ist kein Gag leute, das ist ein wirkliches Problem, schade das es anders rüberkommt. Zumal die Zeit nicht wirklich relevant für das Problem ist!

@himitsu:
Leider ja, da der User an sich das CMD-Fenster nicht sehen soll. Sollte der Prozess nicht nach einer bestimmten Zeit beendet werden, so sieht der User die ganze Zeit nur ein einfaches "Bitte warten...".
Und da man als normaler User da nicht ewig warten will, wird dann praktisch nach der Zeit ein Errorform angezeigt
Mal gleich ne andere Frage, auch wenn es nicht hierher gehört:
Ich habe mir eine config.ini geschrieben und dort einen wert imgfile gesetzt. Der sollte entweder 1 oder 0 sein.
Nun lese ich den Wert aus und das Programm soll je nachdem wie der Wert ist eine Abfolge von Befehlen ausführen oder eine andere:
Code:
if ini.ReadInteger('functions', 'imgfile', 0) = 1 then
  begin
    //tu die Abfolge
  end
  else
  begin
    //tu das andere
  end;
Eigentlich recht simpel. Allerdings habe ich das Problem, das der erste Programmablauf ausgeführt wird, wenn der Wert imgfile eine 1 ist, aber das Programm gar nichts mehr tut, wenn es keine 1 ist. Also wirklich gar nichts mehr. Nach dem Ausführen des Befehls davor, der immer gleich sein soll, wird das Programm an sich noch angezeigt, also keine exception oder ähnliches, allerdings wird keine Programmabfolge mehr ausgeführt, weder das in der if clause, noch in der else clause, noch der Programmcode nach danach.

Kann sich das einer erklären, oder hat einer einen Vorschlag, wie ich dem "Fehler" auf den Grund gehen kann?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: WaitForSingleObject

  Alt 4. Apr 2012, 21:22
Mal gleich ne andere Frage, auch wenn es nicht hierher gehört:
Dann mach dafür bitte auch einen neuen Thread auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz