Delphi-PRAXiS
Seite 1 von 2  1 2      

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?

sniper_w 15. Jul 2005 23:15

Re: Sleep ohne Win32 API
 
Zitat:

Vielleicht hat er Angst, das seine CPU zu heiß läuft?
Bingo. U.a. es verbraucht mehr Strom.
Zitat:

Also doch ein Betriebssystem. Grübelnd... 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.
Schon erledigt.

Luckie 15. Jul 2005 23:17

Re: Sleep ohne Win32 API
 
Wie darf ich das jetzt verstehen? Hast du eine Lösung gefunden? Und wenn ja, wie sieht sie aus?

sniper_w 15. Jul 2005 23:21

Re: Sleep ohne Win32 API
 
Zitat:

Wie darf ich das jetzt verstehen?
Für das "thread" Problemm noch keine Lösung.

Luckie 15. Jul 2005 23:26

Re: Sleep ohne Win32 API
 
Jetzt mal Klartext. Bezog sich das 'Schon erledigt' auf die Features, die ich angesprochen habe? Wie lange arbeitest du denn schon daran?

turboPASCAL 15. Jul 2005 23:28

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von sniper_w
...Das ist mir von vornerein klar, ich war einfach nett zu der Person, die mir helfen wollte.

DANKE. :zwinker: hättest aber auch ein bissel mehr dazuschreiben können ( :idea: ein neues OS sowas aber auch :gruebel: )

sniper_w 15. Jul 2005 23:31

Re: Sleep ohne Win32 API
 
Zitat:

Bezog sich das 'Schon erledigt' auf die Features, die ich angesprochen habe?
Genau. Deswegen habe ich "quots" benutzt.
Zitat:

Wie lange arbeitest du denn schon daran?
Konkret, seit einer Woche, aber die Planung schon ist schon seit etwa ~6 Monten.

Luckie 15. Jul 2005 23:33

Re: Sleep ohne Win32 API
 
Moment du hast das alles in einer Woche implementiert? Warum hat Linus Torvalds dann zwei Jahre oder so gebraucht?

sniper_w 15. Jul 2005 23:37

Re: Sleep ohne Win32 API
 
Alos bitte, ein paar Interupts zu implementieren, die je ~50 oder mehr zeilen Quelltext enthalten, dazu braucht man nicht 2 Jahren. Und ich brauche es nicht so umfangreich wie Linux zu machen...

EDIT
Wir sicn soo stark OT gegangen...

Daniel G 15. Jul 2005 23:38

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von Luckie
Moment du hast das alles in einer Woche implementiert? Warum hat Linus Torvalds dann zwei Jahre oder so gebraucht?

Weil er nicht die Nächte durchprogrammiert hat und sich hat ablenken lassen?

Nee, mal im Ernst. Interessieren würde mich das auch...

// Edit: Huch... wiedermal kein Kästchen...

Thanatos81 15. Jul 2005 23:41

Re: Sleep ohne Win32 API
 
Meinst du wirklich ein OS, oder "nur" einen Shellersatz? Weil eine Woche Implementieren, da musste ja schon fast vom Code träuen, oder wie die von Metal Oxide Software sagen: "Feel the code!" :mrgreen: , um das zu schaffen. Außerdem, wie schreibt man in Delphi ein OS :gruebel: Meist kommen da doch nur Echsen oder DLLs etc. raus. Und die brauchen ja auch nen Unterbau, auf dem sie ausgeführt werden :gruebel:

€dit: immer noch nicht meine Tastatüte gesübert :wall:

sniper_w 15. Jul 2005 23:54

Re: Sleep ohne Win32 API
 
Zitat:

Meinst du wirklich ein OS, oder "nur" einen Shellersatz?
Ich meine wircklich ein OS, wenn man so will. Also ohne Windows-Handbremse.

turboPASCAL 16. Jul 2005 00:13

Re: Sleep ohne Win32 API
 
Auch wenn es jetzt ein bissel OT ist :zwinker:

@sniper_w
Ist jetzt bestimmt auch nix für Dich, aber dennoch... :zwinker: :mrgreen:
Delphi-Quellcode:
procedure MalNeAsmPause(ms: DWORD);
asm
  push ecx
  push ebx
  mov ecx, eax
  call GetTickCount
  mov ebx, eax
  @loop_:
    push ebx
    push ecx
    mov eax, Application
    call TApplication.ProcessMessages
    push 1
    call Sleep
    pop ecx
    pop ebx
    call GetTickCount
    sub eax, ebx
    cmp eax, ecx
    jnae @loop_
  pop ebx
  pop ecx
end;
Und du machst das OS in Delphi, habe ich das richtig verstanden ? Kannst Du mal ein paar Faetures geben (Producktvorschau)?

sniper_w 16. Jul 2005 00:24

Re: Sleep ohne Win32 API
 
Zitat:

Und du machst das OS in Delphi, habe ich das richtig verstanden ?
Wenn ich mich nicht irre, kann man mit Delphi(7<=) nur win32 / (oder mit D8/2005 +.net) Anwendungen erstellen. Wie heisst es nochmals....aha Delphi ist ein Win RAD Tool...entschuldige Win RAD Programm.
Natürlich mache ich das nicht mit Delphi. Aber mit TurboPascal geht es schon :!: :zwinker:

turboPASCAL 16. Jul 2005 00:34

Re: Sleep ohne Win32 API
 
Das habe ich noch ne Frage, lässt Du TP (7?) unter Win32 laufen oder unter Dos ?

sniper_w 16. Jul 2005 00:43

Re: Sleep ohne Win32 API
 
Unter Windows.

turboPASCAL 16. Jul 2005 01:02

Re: Sleep ohne Win32 API
 
Hm, hatte schon bei einigen Prg's von mir (ohne Grund) schnell eine 100 % CPU - Auslastung bei WinXP,
unter Dos war's weniger.

:gruebel: Vielleicht finde ich noch etwas für Dich in meinen alten Büchern.

Neotracer64 16. Jul 2005 01:26

Re: Sleep ohne Win32 API
 
Hast du schon einen Window-Manager geschrieben ? Wäre sehr daran interessiert...

sers

Olli 16. Jul 2005 09:41

Re: Sleep ohne Win32 API
 
*juck* *kratz* :gruebel:

Wie wäre es mit HLT??? Das ist die Methode um Strom zu sparen. Mithilfe von Interrupts wachst du dann wieder auf. Aber mal ehrlich ... Realmode?! Grausam!

sniper_w 16. Jul 2005 12:11

Re: Sleep ohne Win32 API
 
Zitat:

Wie wäre es mit HLT??? Das ist die Methode um Strom zu sparen.
Hättest du vielleicht ein brauchbares Link oder Änliches?
Zitat:

Aber mal ehrlich ... Realmode?! Grausam!
Eine Ansichtssache. Ich finde es viel auregender im Realmode zu programmieren, als Events im ObjektInspektor zuzuweissen.;)

Olli 16. Jul 2005 12:20

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von sniper_w
Zitat:

Wie wäre es mit HLT??? Das ist die Methode um Strom zu sparen.
Hättest du vielleicht ein brauchbares Link oder Änliches?

Guck in die entsprechenden Bände von Intel. Die Manuals sind alle als PDF verfügbar bei den Entwicklerressourcen von Intel.
http://developer.intel.com/design/pentium/manuals/
Bei Google suchenIntel Processor Manuals

Zitat:

Zitat von sniper_w
Eine Ansichtssache. Ich finde es viel auregender im Realmode zu programmieren, als Events im ObjektInspektor zuzuweissen.;)

Ansichtssache vielleicht. Aber wenn deine bisherige Programmiererfahrung im PM nur aus "Events zuweisen" bestand, ist das sehr mager :-|

sniper_w 16. Jul 2005 12:30

Re: Sleep ohne Win32 API
 
Danke für die Links.
Zitat:

Aber wenn deine bisherige Programmiererfahrung im PM nur aus "Events zuweisen" bestand
Natürlich nicht. Aber RealMode finde ich weit mehr aufregender als Windows+Delphi. Aber wie gesagt, eine Ansichtssache.

turboPASCAL 16. Jul 2005 12:31

Re: Sleep ohne Win32 API
 
Schau mal hier vorbei: http://www.merlyn.demon.co.uk/pas-wait.htm

kann z.Z. nix Testen habe nur TP 6 (miniversion) installiert

:zwinker:
Delphi-Quellcode:
asm
  hlt
end;
:gruebel:
Delphi-Quellcode:
function KWAIT(SecsDelay : integer) : integer ;
var
  Tptr : ^longint ;
  Finish : longint ;
  W : word ;
  Ch : byte ;
begin
  KWAIT := -1 {default} ;
  Tptr := Ptr(Seg0040, $006C);
  Finish := Tptr^ + Round(18.2*SecsDelay) ;
  repeat
    asm { free CPU } 
      push ax;
      mov ax,1680h;
      int 2fh;
      pop ax
    end;
    if KeyPressed then begin
      Ch := Ord(ReadKey);
      if Ch=0 then KWAIT := 256+Ord(ReadKey) else KWAIT := Ch ;
      EXIT ;
    end ;
  until Tptr^ > Finish ;
end {KWAIT} ;

Olli 16. Jul 2005 12:39

Re: Sleep ohne Win32 API
 
Zu HaLT muß man sagen, daß der Prozessor angehalten wird, bis ein INT kommt. Also einmal eingeschlafen muß auch wieder was passieren ;)

Moderne OS benutzen das eben zum Stromsparen.

tommie-lie 16. Jul 2005 14:12

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von sniper_w
Hättest du vielleicht ein brauchbares Link oder Änliches?

Sag mal, wie schreibst du eigentlich ein Betriebssystem, ohne Dokumentation der Architektur für die du entwickelst? Rätst du die Mnemonics auf gut Glück? In *jeder* x86-er Doku ist HLT dokumentiert, und sogar der 8088 hatte den.

Zitat:

Aber RealMode finde ich weit mehr aufregender als Windows+Delphi.
PM beschränkt sich nicht auf Windows und Delphi, Bill Gates war nicht der Erfinder der IA32. Aber wenn du dich für einen Datenbankserver damit zufrieden gibst, nur 1MB direkt adressiebaren Speicher zu haben und für den EMS dir ständig deine 16kB-Fenster einblenden willst, viel Spaß dabei. Ich steh' zwar nicht auf Masochismus, aber man soll ja tolerant sein. Aber tu mir bitte den Gefallen und nenne mir die Produktbezeichnung, falls du gedenkst das Ding irgendwann zu veröffentlichen, ich will wissen, um welche Programme ich einen weiten Bogen zu machen habe.

sniper_w 16. Jul 2005 15:40

Re: Sleep ohne Win32 API
 
@tommie-lie: Danke für unnutzbare OT Post. Und zwar von einem Exelent Member. :roll:

tommie-lie 16. Jul 2005 16:08

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von sniper_w
@tommie-lie: Danke für unnutzbare OT Post. Und zwar von einem Exelent Member. :roll:

Meine Fragen waren ernst gemeint und sind es immer noch. Es will mir nicht in den Kopf rein, wie einer, der etwas so systemnahes programmiert nicht in der LAge ist, in der Dokumentation nachzuschauen, die er zum Entwickeln seiner Software benutzen *muss*, es sei denn er ist eine Gottheit, die sämtliche Mnemonics mitsamt Parameterliste und obendrein noch das gesamte Architekturgewurschtele auswendig kennt. Eine solche Gottheit würde aber auch HLT kennen.

Und ich möchte wirklich vermeiden, einen RM-Server zu benutzen, auch das war kein Scherz. Falls du es nur für dich schreibst und niemals gedenkst es zu veröffentlichen, sehe ich davon ab, mich nach dem Namen des Produktes zu erkundigen.


Edit: Ob ich nun Exzellent-Member bin oder der Dorftrottel von nebenan spielt übrigens keinerlei Rolle. Selbst ein Senior-Member sollte die Bedeutung der Benutzerränge erkannt haben.

Olli 16. Jul 2005 16:14

Re: Sleep ohne Win32 API
 
@sniper_w: Nicht gleich eingeschnappt sein :zwinker: . tommie-lie hat nicht ganz unrecht ( :wall: Mist, ich muß tl zustimmen :wall: ). Das ist wie die Frage "Was genau ist VCL?" von jemandem mit einer Delphi 7 Ent. Einfach unglaublich.

Und zu der Sache mit dem Produktnamen. Angenommen du würdest bei NTDEV oder NTFSD mitlesen (und -schreiben), wüßtest du, daß dort beispielsweise Treiber mit Hooks verhaßt sind. Hier sind es andere Sachen, aber die Symptome sind ähnlich ... du sollst den Namen deines Programmes nennen, damit andere sich nicht damit in die Nesseln setzen.

tommie-lie 16. Jul 2005 16:23

Re: Sleep ohne Win32 API
 
Zitat:

Zitat von Olli
( :wall: Mist, ich muß tl zustimmen :wall: )

Hihi. /me holt schonmal den roten Stift, um den Tag einzukringeln :mrgreen:



Nur damit es deutlich ist: Das hier ist ein OT-Beitrag, sniper_w. Jetzt weißt du, wie solche Dinger aussehen.

Luckie 16. Jul 2005 16:32

Re: Sleep ohne Win32 API
 
Ich muss euchbitten sachlich zu bleiben. Und das Posting von tommie-lie war nicht offtopic. Es istnur so, dass du da anscheinend innerhaöb kürzester Zeit was produziert hast, wo für andere Jahre brauchen (um sich überhauptr erstmal die Grundlagen anzueignen). Desweiteren ist vielen überhaupt noch unklar, was du da eigentlich machst, weil du einfach nicht mit Details rausrückst bzw. immer nur so schwamming vormulierst, was du da machst.

sniper_w 16. Jul 2005 16:36

Re: Sleep ohne Win32 API
 
Ahhh....Ich habe weder Kraf noch Lust alles zu erklären. Ich arbeite an dem Projekt nich allein. Ich schreibe auch nicht alles. So. Das Server ist SPEZIEL für EINEN Lager gedacht, man komuniziert mit dem Server über eine Standard WinGUI Anwengung ( mittels selbst geschriebenes Protokol ).
ZB:
WinGUIClient : "hey, gibt es XY Schalter auf dem Lager ?"
Server - (binnen eine nanosekunde): "neee, muss ma halt kaufen..."
WinGUIClient : "sch....."

Was das Server alleine betrifft, es wartet nur auf eine Anfrage, bewertet sie, gibt ein entsprechendes Antwort zurück. Es gibt kein Monitor, Maus, Tattatur etc auf dem Server..
Das MemoryMenagment ist das einzig wichtige Sache worüber wir uns kümmern müssten. Irgen wann mal bin ich auf die Idee gekommen, vielleicht brauchen wir "sleep". Mein eiziger Fehler :).


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Seite 1 von 2  1 2      

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