1Danke
ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
1935
1935
EMPFEHLEN
-
02.05.12 19:41 #1
(aka Cpp-Freak)
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 110
Hallo zusammen,
ich wüsste gerne, ob es eine Timerfunktion in C/C++ gäbe, für Linux. So änlich wie die in Java (java.util.timer).
Am besten wäre, wenn man dem Timer eine Funktion übergeben könnte, die dann dem Zeitintervall entsprechend aufgerufen wird.
ClundFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
02.05.12 20:06 #2
Hi
Verschiedene Frameworks haben sowas, oder sonst einen einfachen Thread.
Sowas:
Das ist jetzt nur schnell hingekritzelt, besserer Pseudocode.Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
struct timerstruct { void (*func)(void *); void *param; unsigned int ms; }; void timerth(void *p) { Sleep(((struct timerstruct *)p)->ms); ((struct timerstruct *)p)->f(((struct timerstruct *)p)->param); free(p); } void starttimer(int ms, void (*funktion)(void *), void *funktionsparameter) { struct timerstruct *p; p = (struct timerstruct *)malloc(sizeof(struct timerstruct)); p->func = funktion; p->param = funktionsparameter; p->ms = ms; _beginthread(p); } //... void meinefunktion(void *meinparameter) { } //... char c[1024]; starttimer(1000, meinefunktion, c); //1 Sekunde
Hat nirgends Fehlerprüfung, ist nicht kompiliert, nicht getestet.
Zu beachten: Threadsafezeug in der aufgerufenen Funktion.
Und Sleep ist nicht wirklich exakt mit den Millisekunden.
Für die Framerate in einem Spiel oder so ist das damit nicht zu gebrauchen.
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
02.05.12 20:10 #3
(aka Cpp-Freak)
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 110
Danke für die schnelle Antwort,
wofür brauchst du "timerth"?
Clund
-
02.05.12 20:11 #4
Hallo,
auch wenn es vielleicht noch andere oder schönere Lösungen gibt, fällt mir grad nur das ein:
1. Schleife evtl. auch endlos z.B. mit while(1)
2. SIGALRM mit eigenem Handler registrieren
3. alarm()-Funktion benutzen, Anzahl der Sekunden als Parameter übergeben.
4. Im eigenen Handler die Geschäfslogik implementieren.
Dieses Beispiel ist aber unter Windows nicht so ohne weiteres umsetzbar, da weder MinGW noch MSVC alarm() oder SIGALRM kennen.
Grundsätzlich wäre es auch mit fork() oder Threads und sleep() lösbar.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
02.05.12 20:17 #5
(aka Cpp-Freak)
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 110
Achso ja, wofür ich das brauche:
ich schreib grad nen sfml Projekt und will die Aktualisierung per Timer steuern
wärenddessen wird ganz unabhängig noch gerechnet
also kein while(), und keine exakt Abarbeitung ...
ClundFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
02.05.12 20:31 #6
timerth ist der Thread.
SFML: Genau sowas mein ich mit Framerate=ungeeignet.
Wenn man den Minicode für die Bildaktualisierung einsetzt bekommt man lustige Sachen,
aber keine flüssige Animation.
SFML hat doch schon einen (um einiges besseren) Timer
Generell sollte man die Hauptschleife aber für die Animation lassen
und den Rest in Threads auslagern. Macht weniger Probleme.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
03.05.12 18:27 #7
(aka Cpp-Freak)
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 110
Gut, muss ich wohl genauer erklären:
Der Inhalt meiner (erstmal 2D Graphik) soll eine Visualisierung (bzw. Funktionsplotter) für ART und SRT sein. Da brauche ich keine Fließenden Bewegungen.
Und danke, dass du mich auf den Timer von sfml aufmerksam gemacht hast, ich hab den in nem Testprogramm schon verwendet.
In der Hauptschleife werden dann (erstmal nur über Konsole) die Terme eingegeben, die dann angezeigt werden.
ich werde jetzt mal rumprobieren, und mich (in diesem Thread) wieder melden.
Clund
Edit: Ich verwende Linux, also saftmeister, das würde ja im Prinzip klappen
-
05.05.12 19:57 #8
(aka Cpp-Freak)
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 110
meine Lösung:
die Grafikklasse hab ich von Timer abgeleitet, und die Run() Funktion ruft draw() auf, was wiederum jede Sekunde eine FPS-Statistik ausgibt. d.h. es läuft mit maximaler FPS, derzeit (noch) über 1500 fps
ClundFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
06.05.12 21:16 #9
(aka Cpp-Freak)
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 110
nächstes Problem: nachdem ich mein Programm weiter geschrieben habe (von Thread, ... abgeleitet), gibt mir der Computer eine Fehlermeldung aus:
Der Code, der dies verursacht ist:Code :1 2 3 4 5
X Error of failed request: BadAccess (attempt to access private resource denied) Major opcode of failed request: 153 (GLX) Minor opcode of failed request: 26 (X_GLXMakeContextCurrent) Serial number of failed request: 52 Current serial number in output stream: 52
Fenster ist ein sfml-Window, als private deklariert, hat auch schon funktioniert, public hilft leider nicht.Code :1
Fenster.draw();
ClundFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
07.05.12 08:49 #10
Mitglied Diamant
- Registriert seit
- Jun 2005
- Beiträge
- 8.559
Hi.
Ich kenne mich mit SFML nicht aus. Allerdings sind eigentlich alle graf. Nutzerschnittstellen single-threaded und nicht threadsafe, außer es ist explizit angegben.
Man darf also nicht von unterschiedlichen Threads auf die Grafikroutinen zugreifen.
Du kannst aber z.B. aufwendige Berechnungen in Threads auslagern und trotzdem auf GUI Ereignisse reagieren.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Timer im Timer
Von binderj1 im Forum .NET CaféAntworten: 9Letzter Beitrag: 30.12.10, 07:07 -
mousup-event erzeugt vorher paint-event.Wie abstellen?
Von Cheesygecko im Forum .NET Windows FormsAntworten: 0Letzter Beitrag: 09.01.09, 14:04 -
Event in Event aufrufen
Von warcraft9105 im Forum .NET Windows FormsAntworten: 6Letzter Beitrag: 24.04.08, 10:00 -
Timer in C
Von DerJens im Forum C/C++Antworten: 2Letzter Beitrag: 06.09.04, 15:03




Zitieren
Login
