Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Zeitschleife im Programm

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Matong
Gast





BeitragVerfasst am: 06. Feb 2002 1:50   Titel: Zeitschleife im Programm

Hey Folks,
ich bin noch ein Newbie im Programmieren unter C und bastell gerade an Snake.

Mein Problem:
Die Bewegung wollte ich mit einer For-Schleife verlangsamen, doch das ist Müll, da das ja auch auf schnelleren rechnern läuft.

Habt ihr ne Ahnung, wie ich den Computer für eine bestimmte Zeit warten lasse???


Und noch was:

Ich hab irendwo gelesen, das man mehrere .c dateien zu einer Datei Zusammen fassen kann. D.h, in der einen steht int main, in den anderen Dateinen stehen weitere Funktionen. Anscheinend kann man die mit "extern funktion" zusammen bringen. Irgendwelche Ideen???



Cya Matong
 

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 06. Feb 2002 13:23   Titel: Re: Zeitschleife im Programm

Hi,

> Habt ihr ne Ahnung, wie ich den Computer für eine bestimmte Zeit warten lasse???

die portabelste Methode ist

select(0, NULL, NULL, NULL, &tv);

mit geeignet gewähltem tv. Siehe die Manpage select(2)

Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 06. Feb 2002 15:28   Titel: Re: Zeitschleife im Programm

Hi!

> Ich hab irendwo gelesen, das man mehrere .c dateien zu einer Datei Zusammen fassen kann. D.h, in der einen steht int main, in den anderen Dateinen stehen weitere Funktionen. Anscheinend kann man die mit "extern funktion" zusammen bringen. Irgendwelche Ideen???

Das ist C-Grundwissen und sollte in jedem Buch behandelt werden. Naja, ich erklär's mal kurz für GCC:

Ok, nehmen wir an, du hast 3 Dateien: main.c, foo.c und bar.c. main.c Verwendet Funktionen aus beiden, bar.c welche aus foo.c und foo.c keine anderen.

Damit alle zu einem Programm zusammengafügt werden, musst du sie einzeln compilieren (in Objekt-Dateien, jene die Endung .o haben) und diese dann zusammen linken. Die Kommandos wären dazu:

gcc -c main.c # Erzeugt main.o
gcc -c foo.c # Erzeugt foo.o
gcc -c bar.c # Erzeugt bar.o
gcc -o programm main.o foo.o bar.o

Damit automatisiert nur das compiliert wird, was auch geändert wurde, verwendet man normalerweise ein Makefile oder am besten gleich automake, aber für den Anfang sollte es ein Shellscript tun.

Wie macht man dem Code in den einzelnen Dateien nun aber die Funktionan aus den anderen Dateien bekannt? Natürlich mit Deklarationen (wozu noch kein "extern" nötig ist). Diese schreibt man nicht in jede einzelne Datei, sondern in Header-Dateien, jene mit #include eingebunden werden.

In foo.h stünden also die Deklarationen für Funktionen, die in foo.c definiert werden. In bar.c und main.c würden wir dann einfügen:

#include "foo.h"

Außerdem bräuchten wir in main.c auch ein #include "bar.h". Im Prinzip war es das schon, nur schützt man Header-Dateien noch gegen mehrfache Inkludierung, indem man sie so aufbaut:

----- schnipp! -----
#ifndef FOO_H
#define FOO_H

/* Rest der Datei. */

#endif
----- schnapp! -----

Viel Vergnügen.

Cheers,
GNU/Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Niki Hammler
Gast





BeitragVerfasst am: 06. Feb 2002 17:40   Titel: Re: Zeitschleife im Programm

#include <unistd.h>

unsigned int sleep(unsigned int sekunden);
void usleep(unsigned long usec);

int nanosleep(const struct timespec *req, struct timespec *rem);

- und die oben erwähnte select Methode
 

Matong
Gast





BeitragVerfasst am: 08. Feb 2002 18:04   Titel: Re: Zeitschleife im Programm

Vielen Dank leute,
hat mir echt weiter geholfen, mit ausnahme des select befehls.

cya Matong
 

arni
Gast





BeitragVerfasst am: 09. Feb 2002 11:35   Titel: Re: Zeitschleife im Programm

sleep oder nanosleep ist nicht das geeignete für so ein Game. Das macht man üblicherweise zeitgesteuert über einen Timer. Immer wenn der Timer einen "Timerkick" generiert wird dann das nächste Element gezeichnet. Über die Einstellung des Timers kann man dann die Geschwindigkeit selbst festlegen bzw. automatisch steigen lassen ("Schwierigkeitsgrad"). Je nachdem kann man das "Warten" auch über Threadsychronisierung ("Semaphoren, Mutexe") machen (natürlich nur wenn man das Programm auch Multithreaded auslegt)

Du meinst wohl die Sichtbarkeit? Für diesen zweck gibt es ja das bereits erwähnte Wort "extern" das eine Anweisung an den Übersetzer darstellt, dass die entsprechende Funktionen/Variable in einem anderen (Objekt)Module zu finden ist. Die enstprechende Funktion muss dann natürlich auch Global sichtbar sein, darf also nicht mit "static" deklariert sein. "static" beschränkt nämlich die Sichtbarkeit auf das entsprechende Module.
Wie es aber schon Wolfgang sagte, das steht in jedem C-Buch fast auf der ersten Seite .
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy