AGB  ·  Datenschutz  ·  Impressum  







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

Alternative Sleep

Ein Thema von Buttercreme · begonnen am 26. Jun 2008 · letzter Beitrag vom 26. Jun 2008
Antwort Antwort
Buttercreme

Registriert seit: 10. Jun 2008
17 Beiträge
 
#1

Alternative Sleep

  Alt 26. Jun 2008, 16:11
Hallo Leute,

Ich habe ein Programm geschrieben welches öfters auf Tastenanschläge, Öffnen von anderen Programmen usw. warten muss. Am Anfang hatte ich viele Sleeps die ich nach und nach durch Timer ersetzt habe. Allerdings konnte ich das nicht überall einsetzen.

Jetzt passiert es das man Programm im Sleep ab und zu abstürzt. Blöd am Sleep ist auch das das Programm solange schläft.

Was ist eine gute alternative zu sleep?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Alternative Sleep

  Alt 26. Jun 2008, 16:14
Kannst du bitte mal genauer erklären, wieso du auf Tastendrücke warten musst, und wieso du das Öffnen einer Datei mit sleep verzögern musst?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Buttercreme

Registriert seit: 10. Jun 2008
17 Beiträge
 
#3

Re: Alternative Sleep

  Alt 26. Jun 2008, 16:26
-> Java Applikation. Das Programm nimmt den Postmessage an, braucht aber eine gewisse Zeit um ihn durchzuführen. Und das gleiche bei dem Start der Java Applikation. Die Sandbox ist ist schon da (und damit das HWND) aber die Inhalte der Sandbox nicht.
  Mit Zitat antworten Zitat
Clemens L.

Registriert seit: 27. Apr 2008
35 Beiträge
 
Delphi 2009 Architect
 
#4

Re: Alternative Sleep

  Alt 26. Jun 2008, 16:36
So wie ich das verstanden habe willst du deine eigene Sleep-Funktion programmieren? Ich würds so machen:

Delphi-Quellcode:
procedure MySleep(milliseconds: Integer);
var a,b,c: int64;
begin
  QueryPerformanceFrequency(a);
  QueryPerformanceCounter(b);
  repeat
    Application.ProcessMessages;
    QueryPerformanceCounter(c);
  until milliseconds = (c - b) * 1000 div a;
  end;
end;
Edit: Ich sehe grade, das Programm darf nicht schlafen, ich weiss nicht ob da in "ProcessMessages" reicht!
Edit2: Code etwas verschönert
Clemens
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#5

Re: Alternative Sleep

  Alt 26. Jun 2008, 16:42
Ich werfe mal Delay in den Raum.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Buttercreme

Registriert seit: 10. Jun 2008
17 Beiträge
 
#6

Re: Alternative Sleep

  Alt 26. Jun 2008, 16:46
@ Clemens

So etwas ähnliches habe ich bereits probiert. Allerdings fällt die Applikation dann auch in einen "Tiefschlaf".

Wie sieht das denn aus wenn man so etwas macht:

Delphi-Quellcode:
Timerxx.Enabled:=TRUE;
While Timerxx.Enabled = True do
begin

end;
Den Timer dann auf z.b. 1 Sekunde stellen und danach sich selber disablen lassen?

Ist so etwas "elegant" oder wie Sleep eher eine Funktion die die Applikation sperrt? Beim Sleep habe ich ja auch das Problem das wenn ich einen längeren Sleep habe ich auch den Rest den Programms nicht mehr bedienen lassen.

@DeddyH: wäre so etwas nicht dem ähnlich was Clemens probieren will? ICh hatte den Thread auch schon gefunden und aufprobiert. Aber trotzdem gibt es während des "Delay" einen Lag in der Applikation.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Alternative Sleep

  Alt 26. Jun 2008, 16:49
Zitat von Buttercreme:
Ich habe ein Programm geschrieben welches öfters auf Tastenanschläge, Öffnen von anderen Programmen usw. warten muss.
Auf irgendwas zu warten ist immer schlecht und das dann über sleep zu machen ist noch schlechter.
Sowas sollte man per Events steuern.
Für Tastendrücke kannst Du OnKeyDown oder OnKeyPress des Formulars verwenden.
Falls auch auf Tastendrück ausserhalb Deines Programmes reagiert werden soll, kannst Du einen Tastaturhook einbauen.
Mehr dazu findest Du mit der Forumssuche mit Stichwort "Hook".

Auf das Öffnen anderer Programme kann man bestimmt auch informiert werden.
Musst halt mal google bemühen.

Auf jeden Falls solltest Du das mit sleep und Timer nochmal überdenken.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Alternative Sleep

  Alt 26. Jun 2008, 16:52
Zitat von Buttercreme:
-> Java Applikation. Das Programm nimmt den Postmessage an, braucht aber eine gewisse Zeit um ihn durchzuführen. Und das gleiche bei dem Start der Java Applikation. Die Sandbox ist ist schon da (und damit das HWND) aber die Inhalte der Sandbox nicht.
ist es ein Java-Programm von euch? Dann würde ich das über JNI erledigen und "normal" mit den per JNI verfügbaren Klassen dieser Anwendung/JAR-Files machen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Clemens L.

Registriert seit: 27. Apr 2008
35 Beiträge
 
Delphi 2009 Architect
 
#9

Re: Alternative Sleep

  Alt 26. Jun 2008, 17:07
Zitat von Buttercreme:
@ Clemens

So etwas ähnliches habe ich bereits probiert. Allerdings fällt die Applikation dann auch in einen "Tiefschlaf".

Wie sieht das denn aus wenn man so etwas macht:

Delphi-Quellcode:
Timerxx.Enabled:=TRUE;
While Timerxx.Enabled = True do
begin

end;
Den Timer dann auf z.b. 1 Sekunde stellen und danach sich selber disablen lassen?

Ist so etwas "elegant" oder wie Sleep eher eine Funktion die die Applikation sperrt? Beim Sleep habe ich ja auch das Problem das wenn ich einen längeren Sleep habe ich auch den Rest den Programms nicht mehr bedienen lassen.

@DeddyH: wäre so etwas nicht dem ähnlich was Clemens probieren will? ICh hatte den Thread auch schon gefunden und aufprobiert. Aber trotzdem gibt es während des "Delay" einen Lag in der Applikation.
Bei deinem Vorschlag hängt der Thread aufjedenfall, da er auch in einer Schleife feststeckt! Das was DeddyH vorgeschlagen hat sieht für mich bis jetzt am besten aus (Delay revisited).

Edit: Ohne es getestet zu haben, aber ich glaube nicht das bei meinem Code der Prozess in einen Tiefschlaf fällt. Hast du es schon getestet?
Clemens
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Alternative Sleep

  Alt 26. Jun 2008, 17:10
Zum Öffnen anderer Programme kannst Du mal hier lesen:
http://www.delphipraxis.net/internal...ct.php?t=99597

Hättest Du aber bestimmt auch über die Suche gefunden.
Stichwörter: "start nachricht"
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  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 06:48 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