Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Sleep ohne Win32 API (https://www.delphipraxis.net/49772-sleep-ohne-win32-api.html)

sniper_w 15. Jul 2005 18:52


Sleep ohne Win32 API
 
Hi.
Kann mir jemand sagen, ist es möglich eine Sleep Procedure zu implementieren, die das Gleiche macht, wie Sleep von Win32API ?
Dabei ist zu beachten dass ich keine while oder repeat Schleife im Kauf nehmen darf, weil die dann die CUP Auslastung auf 100% hochtreiben.

turboPASCAL 15. Jul 2005 19:12

Re: Sleep ohne Win32 API
 
http://www.delphipraxis.net/internal...?p=52152#52152

eine Procedure von Hagen:
Delphi-Quellcode:
procedure Delay(MSecs: Integer);
var
  Tick: DWord;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWord(MSecs);
    while (MSecs > 0) and
     (MsgWaitForMultipleObjects(1, Event, False, MSecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      MSecs := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;
CPU-Auslastung < 1 % (nicht auf einem 386 getestet :mrgreen: )

sniper_w 15. Jul 2005 19:24

Re: Sleep ohne Win32 API
 
Danke, geht auch wunderbar. Eigentlich wollte ich etaws in ASM, also nicht OP bezogen...

sakura 15. Jul 2005 19:30

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von sniper_w
Kann mir jemand sagen, ist es möglich eine Sleep Procedure zu implementieren, die das Gleiche macht, wie Sleep von Win32API ?

Das Gleiche wie die der WinAPI wird nicht gehen, da diese dem Betriebssystem mitteilt, dass Dein Programm für x Millisekunden nicht an einem "Quantum" (Prozessorzeitanteil) interessiert ist und dieses damit auch keine erhält. Alle anders implementierten Lösungen erzwingen weiterhin Processorzeit auf die eine oder andere Art und Weise.

Was spricht eigentlich gegen das Original :gruebel:

...:cat:...

sniper_w 15. Jul 2005 20:43

Re: Sleep ohne Win32 API
 
Zitat:

Was spricht eigentlich gegen das Original
Ich mache hier mein eigenes OS (ist seehr aufregend), und natürlich habe keine API zur verfügung...;)

Luckie 15. Jul 2005 21:44

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von sniper_w
Zitat:

Was spricht eigentlich gegen das Original
Ich mache hier mein eigenes OS (ist seehr aufregend), und natürlich habe keine API zur verfügung...;)

Und das ohne Vorwarnung, ich hätte mich beinahe an meinem Brötchen verschluckt. :roll:

Rat mal was das: MSDN-Library durchsuchenMsgWaitForMultipleObjects ist? Hagens Funktion hat vier mal soviel API Aufrufe und dazu kommt noch ein VCL Methodenaufruf.

Du schuldest mir übrigens eine Tischkante. :warn:

Mal aus Interesse: Was für Systemcalls hast du denn schon implementiert? Da du nach MSDN-Library durchsuchenSleep fragst, müsste dein Betriebssystem ja schon Multitasking unterstüzen.

Mal was zum Lesen:
http://www.amazon.de/exec/obidos/ASIN/3827370191/delphipraxis-21
Aber vorher wäre wohl das sinnvoll:
http://www.amazon.de/exec/obidos/ASIN/3423362995/delphipraxis-21

negaH 15. Jul 2005 22:33

Re: Sleep ohne Win32 API
 
:mrgreen: & :cheers:

sniper_w 15. Jul 2005 22:51

Re: Sleep ohne Win32 API
 
@negaH: bitte keine OT Posts :mrgreen: :zwinker: .

Lucky, bist du lustig oder was ?
Entweder habe ich mich fasch ausgedrückt, oder du traust mir zu viel. ;)

Wie auch immer, es geht um ein Program, ein DatenbankServer, das im RealMode arbeitet. Sobald man das Rechner einschaltet, ist man in meinm Programm gelandet. So, jetzt ist das Problem, dass es 100% an CPU Leistung nimmt , wenn es nichts macht, d.h. wenn es auf Mouse oder Tastatur wartet. Wie könnte man es vorübergehend "einschlaffen" ?
Es tut mir leid dass ich mich falsch ausgedrückt habe.

EDIT
Zitat:

Rat mal was das: Suche im Microsoft Developers NetworkMsgWaitForMultipleObjects ist? Hagens Funktion hat vier mal soviel API Aufrufe und dazu kommt noch ein VCL Methodenaufruf.
Das ist mir von vornerein klar, ich war einfach nett zu der Person, die mir helfen wollte.

Kaffe krigst du schon, wenn wir uns treffen ;).

Luckie 15. Jul 2005 23:03

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von sniper_w
Entweder habe ich mich fasch ausgedrückt, oder du traust mir zu viel. ;)

Zitat:

Ich mache hier mein eigenes OS
Was gibt es da falsch zu verstehen? Ein Betriebssystem ist für mich kein Datenbankserver.

Zitat:

ein DatenbankServer, das im RealMode arbeitet. Sobald man das Rechner einschaltet, ist man in meinm Programm gelandet.
Also doch ein Betriebssystem. :gruebel: Wenn dein, nennen wir es mal Programm, vom BIOS geladen wird und sonst nichts da ist, dann braucht es zu mindest ein Dateisystemtreiber, da es keine Schicht darunter gibt, auf die du zurückgreifen kannst, du bist ja die unterste Schicht selber, ergo musst du einen Dateisystemtreiber implementiert haben, es sei denn du hast ihn bei einem OpenSource OS geklaut. Dann brauchst du ein Speichermanagment, du musst ja was im Speicher ablegen und auch wiederfinden können. Dann werden für die Ein- und Ausgaben Treiber benötigt. Da es sich um einen Sever handelt, muss er auch irgendwie kommunizieren können, das heißt, du brauchst einen Netzwerktreiber mit einem Protokoll, was die Clienst verstehen, also eine TCP/IP Stack oder so was. Und da wären wir schon bei einem Betriebssystem. Wenn es auch nur ein kann, als Datenbankserver fungieren.
Aber da dein Programm sowoieso das einzige ist, was auf dem System läuft, was machst du dir Sorgen um die CPU Auslastung? Es gibt doch keinen anderen Prozess, der die Ressourcen benötigen könnte?

Daniel G 15. Jul 2005 23:13

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von Luckie
Es gibt doch keinen anderen Prozess, der die Ressourcen benötigen könnte?

Vielleicht hat er Angst, das seine CPU zu heiß läuft?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.
Seite 1 von 5  1 23     Letzte »    

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