[ frenk_castle @ 20.06.2008. 11:02 ] @
Mozda pitanje ne treba da stoji u ovoj sekciji foruma. Ali ovo je zadatak za faks pa racunam ne bi trebalo da je mnogo komplikovano. Jedino ja nemam puno vremena.

Treba da napisem kod koji ce da radi sledecu stvar. Odradi kod iz mog thread-a a onda thread uspava, ali tako da thread bude probudjen uvek u istom periodu u odnosu na pocetak njegovog rada. Primer

while (programStateIsRegular){
nextTime=currentTime+period;
doSomething;
suspendUntil(nextTime);
}

Znaci da se meni thread budi uvek sa istom periodom jer mora periodicno da cita neke senzore, vodi log, kontrolise proces itd. Za svaku ovu stvar cu verovatno imati poseban thread i svaki ce imati neku svoju periodu. Periode za sada treba da budu 100ms, 200ms i 3s.

Nama je asistent dao h i cpp fajlove sa nekakvim tajmerima, ali ja u tome ne uspevam da se snadjem. Znaci ako neko ima gotov kod koji radi ovako nesto ili zna gde mogu da ga skinem neka mi javi. Prednost ima moron friendly kod sa detaljnim uputstvom za koriscenje.

Za one kojima jos nije jasno sta mi treba plasticniji primer sa periodom od 20 sekundi.

Thread se probudi u 12:34:54. Sledece budjenje mu je u 12:35:14.
Dobije procesor u 12:34:55.
Krene da radi sta ima.
Zavrsi petlju u 12:34:58. Recimo jos dva thread-a su bila aktivna pa je radio malo duze.
Zaspi.
Probudi se u 12:35:14.
Dobije procesor u 12:35:16.
Krene da radi sta ima.
Zavrsi petlju u 12:35:17. Recimo svi ostali thread-ovi su suspendovani pa je zavrsio brze.
Zaspi.
Probudi se u 12:35:34.

Sve ovo treba da radi pod Windows-om i treba da bude napisano i izkompajlirano u Visual Studio-u 2005. Tako je zahtevano.

Ako neko moze da mi pomogne bio bih jako zahvalan. Ako nisam bio dovoljno jasan recite gde pa cu probati da budem jasniji.

Hvala unapred
[ Eurora3D Team @ 20.06.2008. 14:20 ] @
Mozes da pokrenes thread u startu progama i da u thread funkciji cekas (odnosno ponavljas nesto sa cekanjem).
Ovaj kod sam napisao u VC++ 2008 mada moze da se kompajluje na svakom kompajleru.
Kod je za console aplikaciju , ali je princip isti i za GUI app.
Code:

#include <windows.h> // za CreateThread i Sleep
#include <iostream>
using namespace std;

bool Go = true;

DWORD WINAPI ThreadFunc(void* param)
{
    DWORD ms=(DWORD)param; // ms cekanje
    while(Go){ // dok je Go == true
    cout << "thread" << endl; // radi nesto
    Sleep(ms); // ceka ms milisekundi
    }
    return 0;
}

int main(int argc, char* argv[])
{
    cout << "main start" << endl;
    DWORD sm = 1000; // ovaj parametar mozemo da pranesemo u thead fn , on oznacava milisekunde cekanja ... ovde je 1 sec
    DWORD dw=0;// Vraca Thread ID
    HANDLE hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,(LPVOID)sm,0,&dw);
    Sleep(20000);  // ovde se izvrsava program ... ovaj traje 20 sec. Mi smo to veme simulirali cekanjem
    Go=false; // na kaju menjamo vrednost Go na false da bi se ispunio uslov za kraj thread-a
    cout << "main end" << endl;
    system("pause");
    return 0;
}