AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Sleep bzw. Timer in C?

Ein Thema von Matze · begonnen am 5. Mai 2007 · letzter Beitrag vom 5. Mai 2007
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 14:07
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.

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

Grüße
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 14:21
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 14:32
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 ...
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 14:50
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 ).

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?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 15:30
SetTimer sollte kein C++ sein sondern ist teil der windows-api (windows.h)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 15:57
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: Das piept nur, wenn ich es über den Debugger des VS starte. Sonst nicht.
Angehängte Dateien
Dateityp: zip snake_116.zip (1,26 MB, 0x aufgerufen)
  Mit Zitat antworten Zitat
LizardKaiser

Registriert seit: 18. Feb 2007
Ort: Kassel
25 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 16:56
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Sleep bzw. Timer in C?

  Alt 5. Mai 2007, 18:14
ein unsichtbares fenster ist gar nicht nötig weil SetTimer wenn ich mich nicht irre auch mit einer Callback-funktion zurecht kommt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:46 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