Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

WM_TIMER u thread funkciji kreiranoj sa CreateThread

[es] :: C/C++ programiranje :: WM_TIMER u thread funkciji kreiranoj sa CreateThread

[ Pregleda: 2679 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.dialup.blic.net



+2 Profil

icon WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 16:32 - pre 239 meseci
Zelio bi da posaljem SetTimer i da ga obradim u thrad funkciji koja je kreirana sa CreateThread.
Da li neko zna za primjer kako ovo uraditi bez upotrebe MFC-a, znaci samo sa API pozivima.
Thread funkcija bi trebalo da obradi WM_TIMER poruku ali kako poslati tu poruku samo tom thredu.

Ljubisa
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net



+6 Profil

icon Re: WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 17:03 - pre 239 meseci
1. Izbegavaj CreateTimer() i koristi _beginthreadex()

http://www.mtholyoke.edu/courses/dstrahma/cs322/lab3andproj.htm

2. Moraćeš da hvataš WM_TIMER poruke u toj funkciji, što znači da moraš da imaš Message Loop u njoj.
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.dialup.blic.net



+2 Profil

icon Re: WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 17:22 - pre 239 meseci
OK, mislim da neće biti veliki huruški zahvat da ubacim _beginthreadex() umjesto BeginThread, ali kako da pošaljem poruku SetTimer baš određenoj thread proceduri?

Prvi parametar sa SetTimer je HWND a thredovi koje koristim nemaju HWND.


Pretpostavljam da bih mogao da cekam WM_TIMER sa ovakvim loop-om
Code:

while (GetMessage(&msg, NULL, 0, 0)) 
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }


Inače riječ je o RS232 programu koji treba u odredjeno vrijeme da šalje karaktere na COM port.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net



+6 Profil

icon Re: WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 18:02 - pre 239 meseci
Citat:
ljube:
Inače riječ je o RS232 programu koji treba u odredjeno vrijeme da šalje karaktere na COM port.


Mislim da bi u tvom slučaju bilo bolje da koristiš MM timere. Pogledaj:

http://www.codeproject.com/system/timers_intro.asp#MMTimers
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.dialup.blic.net



+2 Profil

icon Re: WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 18:15 - pre 239 meseci
Nije mi toliko bitna rezoulcija koju koriste MM timer-i. Dovoljne su mi i ms koje pruza varijanta SetTimer ali i dalje ne znam kako da tu poruku posaljem bas odredjenom thredu.
Znam da je moguce u MFC thredovima, ali...

Nema veze, rjesicu taj problem nekako.

Evo jos jedno pitanje u vezi thredova ...

Ako imam 10 otverenih therdova i svi oni pozivaju jednu funkciju.
Funkcija inace odsjeca dijelove buffera(string) koji prosledjuju thred-ovi ali abog kompleksnosti kopira taj buffer u neke lokalne varijable.
Kako da budem siguran da nece doci do mijesanja podataka prilikom poziva te zajedniceke funkcije.
Da li moram da koristim neke varijante sinhronizacije ili je u principu sigurno da razliciti thredovi pozivaju istu funkciju kao na primjer neke od Windows API funkcija.
Da li je samo stvar u deklarisanju varijabli te funkcije.
Znam da bi bio problem sa varijablama koje su onzacene kao static.

Jednom sam pravio eksperiment i svim varijablama dodjelio "storage specifier" auto.

Prmimjer:
auto int a;
auto long b;
...

I onda sam modifikovao te varjijable pozivom iz raclicitih thredova i primjetio sam da se podaci ne mijesaju.

Obzirom da sam ja novajlija u MS C++, (dugo vremena koristim C i Win32 API) molim za neki savjet kako rade thredovi u C++ svijetu.


Pozdrav,
Ljubisa













 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net



+6 Profil

icon Re: WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 18:29 - pre 239 meseci
MM timere ti nisam preporučio zbog rezolucije, već zbog činjenice da se timer fnkcije automatski izvršavaju u posebnoj niti, pa ne treba ni da se baviš _beginthreadex-om i sličnim stvarima.

Što se tiče lokalnih promenljivih, nemaj brige. Svaka nit ima svoj stek, a lokalne promenljive idu na stek.
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.dialup.blic.net



+2 Profil

icon Re: WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 18:57 - pre 239 meseci
Hvala!
Prilicno me brinulo ovo sa thredovima. Obraticu paznju i na MM timere.

Pozdrav,
Ljubisa
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



+3 Profil

icon Re: WM_TIMER u thread funkciji kreiranoj sa CreateThread28.08.2004. u 19:43 - pre 239 meseci
Citat:
ali kako da posaljem poruku SetTimer bas odredjenoj thread proceduri

Mozda nesto ovako:
Code:

void thread_proc(void*){
    HWND h_wnd = ... //kreiras nevidljiv prozor ili dijalog
    if(!h_wnd)
        return; //prozor nije kreiran
    SetTimer(h_wnd, TIMER_ID, 1000 /* period */, NULL);
    MSG msg;
    hwnd = h_wnd; //preneses window handle glavnom thread-u, da bi mogao da 
              //salje poruke ovom thread-u (npr. WM_BYE_BYE)
    while(true){
        if(PeekMessage(&msg, h_wnd, 0, 0, PM_REMOVE)){
            switch(msg.message){
                case WM_BYE_BYE:
                    KillTimer(h_wnd, TIMER_ID);
                    DestroyWindow(h_wnd);
                    return;
                case WM_TIMER:
                    if(msg.wParam == TIMER_ID)
                        //slanje karaktera na RS232 port
                    
                ...
            }
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
            sleep(50); //ovo nije bas najsrecnije resenje;
    }
}


O_o
 
Odgovor na temu

[es] :: C/C++ programiranje :: WM_TIMER u thread funkciji kreiranoj sa CreateThread

[ Pregleda: 2679 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.