![]() |
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. |
Re: Sleep ohne Win32 API
![]() eine Procedure von Hagen:
Delphi-Quellcode:
CPU-Auslastung < 1 % (nicht auf einem 386 getestet :mrgreen: )
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; |
Re: Sleep ohne Win32 API
Danke, geht auch wunderbar. Eigentlich wollte ich etaws in ASM, also nicht OP bezogen...
|
Re: Sleep ohne Win32 API
Zitat:
Was spricht eigentlich gegen das Original :gruebel: ...:cat:... |
Re: Sleep ohne Win32 API
Zitat:
|
Re: Sleep ohne Win32 API
Zitat:
Rat mal was das: ![]() Du schuldest mir übrigens eine Tischkante. :warn: Mal aus Interesse: Was für Systemcalls hast du denn schon implementiert? Da du nach ![]() Mal was zum Lesen: Aber vorher wäre wohl das sinnvoll: |
Re: Sleep ohne Win32 API
:mrgreen: & :cheers:
|
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:
Kaffe krigst du schon, wenn wir uns treffen ;). |
Re: Sleep ohne Win32 API
Zitat:
Zitat:
Zitat:
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? |
Re: Sleep ohne Win32 API
Zitat:
|
Re: Sleep ohne Win32 API
Zitat:
Zitat:
|
Re: Sleep ohne Win32 API
Wie darf ich das jetzt verstehen? Hast du eine Lösung gefunden? Und wenn ja, wie sieht sie aus?
|
Re: Sleep ohne Win32 API
Zitat:
|
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?
|
Re: Sleep ohne Win32 API
Zitat:
|
Re: Sleep ohne Win32 API
Zitat:
Zitat:
|
Re: Sleep ohne Win32 API
Moment du hast das alles in einer Woche implementiert? Warum hat Linus Torvalds dann zwei Jahre oder so gebraucht?
|
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... |
Re: Sleep ohne Win32 API
Zitat:
Nee, mal im Ernst. Interessieren würde mich das auch... // Edit: Huch... wiedermal kein Kästchen... |
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: |
Re: Sleep ohne Win32 API
Zitat:
|
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:
Und du machst das OS in Delphi, habe ich das richtig verstanden ? Kannst Du mal ein paar Faetures geben (Producktvorschau)?
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; |
Re: Sleep ohne Win32 API
Zitat:
Natürlich mache ich das nicht mit Delphi. Aber mit TurboPascal geht es schon :!: :zwinker: |
Re: Sleep ohne Win32 API
Das habe ich noch ne Frage, lässt Du TP (7?) unter Win32 laufen oder unter Dos ?
|
Re: Sleep ohne Win32 API
Unter Windows.
|
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. |
Re: Sleep ohne Win32 API
Hast du schon einen Window-Manager geschrieben ? Wäre sehr daran interessiert...
sers |
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! |
Re: Sleep ohne Win32 API
Zitat:
Zitat:
|
Re: Sleep ohne Win32 API
Zitat:
![]() ![]() Zitat:
|
Re: Sleep ohne Win32 API
Danke für die Links.
Zitat:
|
Re: Sleep ohne Win32 API
Schau mal hier vorbei:
![]() kann z.Z. nix Testen habe nur TP 6 (miniversion) installiert :zwinker:
Delphi-Quellcode:
:gruebel:
asm
hlt end;
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} ; |
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. |
Re: Sleep ohne Win32 API
Zitat:
Zitat:
|
Re: Sleep ohne Win32 API
@tommie-lie: Danke für unnutzbare OT Post. Und zwar von einem Exelent Member. :roll:
|
Re: Sleep ohne Win32 API
Zitat:
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. |
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. |
Re: Sleep ohne Win32 API
Zitat:
Nur damit es deutlich ist: Das hier ist ein OT-Beitrag, sniper_w. Jetzt weißt du, wie solche Dinger aussehen. |
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.
|
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 17:59 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