Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sleep bzw. Timer in C? (https://www.delphipraxis.net/91478-sleep-bzw-timer-c.html)

Matze 5. Mai 2007 14:07


Sleep bzw. Timer in C?
 
Hi,

ich benötige einen Timer in C, nur befürchte ich, dass es da keinen geben wird, zumindest habe ich nichts gefunden. SetTimer() müsste C++ sein.
Daher wollte ich eine Schleife pausieren lassen, was anderes bleibt mir wohl nicht übrig. Dazu habe ich die windows.h eingebunden, um die Funktion sleep() nutzen zu können. Das Problem dabei ist nur die sehr hohe CPU-Auslastung und seltsamerweise ertönt irgendein sehr leiser Pfeifton von meinem Laptop während sleep() ausgeführt wird. Aber das klingt so, als pfeife da irgendeine Schnittstelle, also nicht der Lautsprecher. :freak:

Wie kann ich das nun in C lösen (Konsolenanwendung)?

Grüße

OregonGhost 5. Mai 2007 14:21

Re: Sleep bzw. Timer in C?
 
Ich fürchte, in reinem C bist du am ehesten auf deine Hostplattform angewiesen... Pures C klingt nach Embedded-Plattform ohne Betriebssystem?
Ansonsten wäre der Header time.h einen Blick wert, um selbst eine Art Timer zu programmieren. Das ist leider der Preis, den C für Plattformunabhängigkeit zahlt, es sind so gut wie keine Funktionen vorhanden, die eine Plattform potenziell nicht bieten kann.

Wenn C keine unbedingt notwendige Anforderung ist, wäre ein Sprung auf C++ und dann die Einbindung von Boost eine Überlegung wert.

Edit:
Wenn du windows.h einbinden kannst, bist du wohl nicht auf einer kleinen Plattform. Verzeih mir die Frage, warum dann C und nicht C++? Und dass Sleep() (großgeschrieben übrigens) irgendwelche PFeifgeräusche verursacht, statt einfach zu funktionieren, wäre mir auch neu.

Matze 5. Mai 2007 14:32

Re: Sleep bzw. Timer in C?
 
Hi, danke.

Unsere Aufgabenstellung lautet, wir sollen ein Projekt in C schreiben. Also auf .NET etc. möchte ich daher auf jedenfall verzichten und wenn das mit C nicht geht, dann nutze ich eben C++, ich hoffe, das wird auch akzeptiert.
Platformunabhängig muss ich für dieses Projekt nicht sein, das wird nur unter Windows ausgeführt und soll eine Übung für die spätere Mikrocontollerprogrammierung sein, dass man sich an C gewöhnt. Und daher sollte ich wahrscheinlich weitestgehend auf C++ verzichten.

Hm ich stelle gerade fest, dass selbst ohne Sleep() gepfiffen wird, hast Recht. Aber irgendwie komisch ...

OregonGhost 5. Mai 2007 14:50

Re: Sleep bzw. Timer in C?
 
Was nun, µC oder Windows? *g*

Solange du windows.h einbinden darfst, ist Sleep schon vernünftig. Auf deinem Mikrocontroller sieht die Geschichte nachher wieder ganz anders aus, da wird dir auch kein Boost oder sonstwas tolles helfen, sondern lediglich der Controller selbst und die C-Standardbibliothek (bete schonmal, dass der Compiler für deinen Controller diese korrekt implementiert :roll:).

Edit:
Was das Pfeifen angeht: Ich habe insbesondere mit dem Aufladen von Akkus (z.B. bei Handys und PDAs) die Erfahrung gemacht, dass sie pfeifen könnten, teilweise erstaunlich laut. Das passiert deinem Laptop nicht zufällig auch beim Laden? :)

SirThornberry 5. Mai 2007 15:30

Re: Sleep bzw. Timer in C?
 
SetTimer sollte kein C++ sein sondern ist teil der windows-api (windows.h)

Matze 5. Mai 2007 15:57

Re: Sleep bzw. Timer in C?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi

@OregonGhost: Nein, ich habe den Akku gar nicht eingesteckt, sondern betreibe den Laptop am Netz. Das pfeift bei der Anwendung leider generell (sind noch zahlreiche Bugs drinnen und unverhofft kann auch mal eine nette AV kommen - woher auch immer - aber ich hab's mal angehängt, dann könnt ihr mir sagen, ob's auch pfeift. Denn ich wüsste nicht, was ich anders Programmieren sollte, die Schleife sieht so aus:

Code:
   while (! my_snake->finished)
   {
      if (kbhit())
      {
         pressed_key = getch();

         switch (pressed_key)
         {
            case Key_Left:
               my_snake->set_direction('L');
               break;
            case Key_Right:
               my_snake->set_direction('R');
               break;
            case Key_Up:
               my_snake->set_direction('U');
               break;
            case Key_Down:
               my_snake->set_direction('D');
               break;
            case Key_Escape:
               my_snake->finished = true;
               break;
         }
      }
      my_snake->move();
      my_snake->paint_map();
      Sleep(50);
   }
@Jens: Ah das klingt gut. Ich habe zwar noch nie damit gearbeitet, sondern es beim Googeln gefunden, aber das sehe ich mir mal an. :)

Edit: Anhang vergessen.
Edit 2: :shock: Das piept nur, wenn ich es über den Debugger des VS starte. Sonst nicht. :gruebel:

LizardKaiser 5. Mai 2007 16:56

Re: Sleep bzw. Timer in C?
 
SetTimer ist ganz recht aus der WinAPI, deshalb würd ich dir empfehlen:
mach doch unsichtbares fenster, setze den Timer und bearbeite in der WM_TIMER
Message deine aufgaben ;)

ich empfehle Blicke in die MSDN für:

RegisterClass
CreateWindow
ShowWindow
Window Procedure
SetTimer
KillTimer
WM_TIMER

...der ganz normale windows wahnsinn eben :coder2:

SirThornberry 5. Mai 2007 18:14

Re: Sleep bzw. Timer in C?
 
ein unsichtbares fenster ist gar nicht nötig weil SetTimer wenn ich mich nicht irre auch mit einer Callback-funktion zurecht kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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