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
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.683 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 himitsu
himitsu

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

AW: WaitForSingleObject

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

ressourcenschonend ja, aber muß es denn gleich in einem Mord (Kill) enden?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:17 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