suche nach Timer der in bestimmten Abständen funktionen ausführt.
-
ich benötige einen timer der beim starten des programms angeschmissen wird. ich weiss nicht ob dafuer ein thread nötig ist oder ob man das ohne realisieren kann. ich habe mir das ganze so vorgestellt.
programmstart --> timer der alle 5sekunden eine funktion ausführt.
ist sowas kompliziert umzusetzen ?
ich hab schon beio google vorbei geschaut. aber nur den ctimer gefunden der das aktuelle datum rausgibt.
ist sowas in der art irgendwie möglich??
int i=0; while(true){ // 1000ms warten -> geht das irgednwie? i++; if(i >= 5){ // funktion ausführen i=0; } }
sowas in der art möglich?
danke euch !!
-
wenn ichs mir so recht überlege brauch ich wohl doch nen thread damit nebenbei auch alles andere läuft.. richtig ??
habt ihr noch ideen ?
danke euch !!
-
richtig...
-
Melli83 schrieb:
wenn ichs mir so recht überlege brauch ich wohl doch nen thread damit nebenbei auch alles andere läuft.. richtig ??
auf welchem system soll das laufen?
hast du kein OS, dann wäre vielleicht das hier was für dich: http://www.sics.se/~adam/pt/
-
Zum Warten gibt es auf Windows Sleep, auf unix sleep (und Konsorten). Je nachdem wie genau es sein muss und wie lange
// funktion ausführen
dauert, kannst du es schon so machen wie du erst dachtest. Die gesamte Periodendauer ist dann halt nicht 5sec sondern (5sec) + (Zeit für Funktion). Das wäre die einfache Variante, die sauberere wäre mit einem eigenen Thread.
-
also OS ist windows CE.
ich habe mal nach thead und C bzw c++ gesucht. aber wenn ich da bsp bekomme sind die extrem lang und aufgeplustert.
gibt es davon nicht einfach ne sparversion wo ich meinen ticker einfach reinklatschen kann ???danke !!
-
achso.. ich dachte ein thread wäre zwingend nötig =).. das freut mich ja zu hören.
ne so genau muss es nicht sein. ich sage mal 5-8 sekunden ^^
-
hmm... ist sicher kein thread nötig ?? sonst hängt er doch 8 sekunden in der einen schleife und ich kann gar nichts anderes tun.
danke
-
Melli83 schrieb:
also OS ist windows CE.
ich habe mal nach thead und C bzw c++ gesucht. aber wenn ich da bsp bekomme sind die extrem lang und aufgeplustert.um eine funktion unter win-ce als thread zu starten gibt CreateThread, oder einfacher:
void deine_funktion (void *p) { puts (p); // gibt hallo aus } ... #include <process.h> _beginthread (RxThread, 0, "hallo"); ...
-
^^edit: RxThread soll natürlich 'deine_funktion' heissen.
-
Melli83 schrieb:
sonst hängt er doch 8 sekunden in der einen schleife und ich kann gar nichts anderes tun.
Natürlich tut er das. Ich habe auch nur deine ursprüngliche Frage mit den ursprünglichen Angaben beantwortet
-
@tim: ok das macht sinn
... also Thread.
@-fricky-: danke fuer deine hilfe. jedoch funktioniert das noch nicht so recht.
ich habe versucht deinen code bei mir einzubauen. sieht folgendermaßen aus:
#include "stdafx.h" #include "scanSample2.h" #include <commctrl.h> #include <process.h> . . . void Timer(void *p){ puts(p); } . . . int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; HACCEL hAccelTable; _beginthread (Timer, 0, "hallo"); . . ....
hoffe ich habs nicht ganz falsch gemacht
.. also proccess.h kennt er gar nicht.
zu puts sagt er:
error C2664: 'puts' : cannot convert parameter 1 from 'void *' to 'const char *'
und zum threadstart:
error C2065: '_beginthread' : undeclared identifier
Error executing clarm.exe.hmm... hast du ne idee woran das liegen kann ? oder alles falsch gemacht ???
danke !!
-
Ich glaube für die process.h brauchst das Windows SDK. Wenn er die process.h nicht findet, kann er _beginthread() auch nicht kennen.
Das mit dem puts liegt wohl daran, dass du einen C++ und keinen C-Compiler verwendest.
-
ich hab das windows CE SDK .. vllt ist es da ja nicht drin.
aber laut fricky
""um eine funktion unter win-ce als thread zu starten gibt CreateThread, oder einfacher:
sollte es ja gehen. vllt weiss er noch rat.
danke !!
-
Also in der Windows API habe ich die Funktionen SetTimer/KillTimer sowie die Nachricht WM_TIMER gefunden. Die sind übrigens Teil von winuser.h von dem Windows CE OS.
Die scheinen alle recht brauchbar zu sein.
-
Melli83 schrieb:
aber laut fricky
""um eine funktion unter win-ce als thread zu starten gibt CreateThread, oder einfacher:
sollte es ja gehen.ach so, kann sein dass es die funktion nicht gibt unter CE. aber die hier gibts ganz sicher: http://msdn.microsoft.com/en-us/library/ms939170.aspx
-
ha mir jetzt was gebastelt. funktioniert an sich auch.. aber halt nicht richtig. deswegen nochmal die nachfrage
..
also sieht jetzt so aus:
#include <commctrl.h> #include <windows.h> . . . struct ThreadData { HANDLE stopEvent; TCHAR data; ThreadData() : stopEvent(0){} }; DWORD WINAPI ThreadFunc(LPVOID param) { ThreadData* threadData = (ThreadData*)param; while(1) { Sleep(1000); _tprintf(_T("hallo umma1234")); } return 69; } . . . int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; HACCEL hAccelTable; int count = 0; /////////////////////////////////////////////////////////////////////////////////////////////////// ThreadData* threadData = new ThreadData; // Hier wird das Event erzeugt // threadData->stopEvent = CreateEvent(0,FALSE,FALSE,_T("StopEvent")); DWORD threadId = 0; // und hier ezeugen wir den Thread HANDLE h = CreateThread(0, 0, ThreadFunc,(void*)threadData,0,&threadId); DWORD wait = WaitForSingleObject(h, INFINITE); /////////////////////////////////////////////////////////////////////////////////////////////////// . . .
soooo.. an sich funktioniert es auch. also ich starte das programm und es popt ein fenster auf in dem jede sekunde der string angezeigt wird.
mein problem ist jetzt. das restliche programm startet nicht mehr ^^
es soll doch beides parallel laufen. und nicht nur eins von beidenhabt ihr noch ne idee? muss ich das anders starten irgednwie ??
danke euch !!
-
DWORD wait = WaitForSingleObject(h, INFINITE);
^^das liegt daran. das programm wartet, bis der thread beendet wird. das passiert aber nie, weil du im thread eine endlosschleife hast.
solltest du die zeile allerdings ganz rausschmeissen, wird dein programm beendet und damit auch der thread gekillt.
...aber ersetz' die zeile mal durch:while(1) { Sleep(1000); printf ("hello from main thread"); }
-
ok ich hab die zeile ganz rausgeschmissen. ist doch auch ok oder ?
weil oben hatte ich ja schon dein beispiel stehen ..DWORD WINAPI ThreadFunc(LPVOID param) { ThreadData* threadData = (ThreadData*)param; while(1) { Sleep(1000); _tprintf(_T("hallo umma1234")); } return 69; }
also kein problem wenn sie einfachh ganz draussen ist ?
oder sollte ich die while schleife in die mainfunktion packen ?danke
-
also alles gleich nur die waitzeile rausgeschmissen