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

kako ubaciti timer?

[es] :: C/C++ programiranje :: kako ubaciti timer?

[ Pregleda: 1398 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
194.106.167.*



Profil

icon kako ubaciti timer?20.01.2006. u 07:59 - pre 222 meseci
Pozdrav svima!
Imam programcic koji kreira prozor koji hvata dogadjaje KEYDOWN i KEYUP i ti dogadjaji se hvataju dok se prozor ne zatvori. Ja hocu da ubacim neki tajmer koji je npr. 5 sekundi tako da cekam na dogadjaj 5 sekundi i bez obzira da li se taj dogadjaj ostvari ili ne ako istekne 5 sekundi prekidam cekanje. Pokusala sam da na pocetku programa ucitam trenutno vreme i na njega dodam tih 5 sekundi i to mi je limit. Onda u while petlji gde cekam na dogadjaje ucitavam opet trenutno vreme i proveravam da li je vece od limita i ako jeste prekidam while. Medjutim to ne funkcionise bas onako kako sam ja mislila i problem je sto ne razumem najbolje kako funkcionise GetMessage funkcija. Da li neko ima iskustva sa slicnim stvarima i eventualno neki savet?Kacim kod.
Hvala unapred!

Code:

#include <windows.h>
#include "stdio.h"
#include "time.h"

const char g_szClassName[] = "myWindowClass";

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

    boolean processed;
    LRESULT result;

      result = 0;
      processed = false;

      switch (msg)
      {
        case WM_KEYDOWN:
          // taster je pritisnut!!!
          processed = true;
          printf("Pritisnut taster\n");
          //DestroyWindow(hwnd);
          //PostQuitMessage(0);
          break;


        case WM_KEYUP:
          // taster je pushten!!!
          processed = true;
          printf("Pusten taster\n");
          //DestroyWindow(hwnd);
          //PostQuitMessage(0);
          break;

        case WM_CLOSE:
                            DestroyWindow(hwnd);
          PostQuitMessage(0);
                            break;
      }

      if (!processed)
            result = DefWindowProc(hwnd, msg, wParam, lParam);

      return result;
}

int main()
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;
    HINSTANCE hInstance = NULL;

    time_t currentTime,limitTime,moreTime;

    currentTime = time (NULL);
    limitTime = currentTime + 5;
    moreTime = limitTime - currentTime;
        
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = NULL;
    wc.hCursor       = NULL;
    wc.hbrBackground = NULL;
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = NULL;
    
    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx
    (    WS_EX_TOOLWINDOW,
        g_szClassName,
    //    TEXT("beznadezan prozor"),
        NULL,
        WS_POPUP,
        0, 0 , 0, 0,
        NULL,
        NULL,
        hInstance,
        NULL
    );
    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);

    while((moreTime > 0) && (GetMessage(&Msg, NULL, 0, 0) > 0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);

        currentTime = time(NULL);
        moreTime = limitTime - currentTime;
        printf("moreTime %ld\n",moreTime);
        
    }

    return Msg.wParam;
}

 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: kako ubaciti timer?21.01.2006. u 11:30 - pre 222 meseci
Malo sam zardjo sto se tice WINAPI -a, ali ja mislim da se koristi funkcija SetTimer.
Kod:
Code:

#define TIMER_1 2345
//......
SetTimer(prozor,//handle od prozora
             TIMER_1,//deskriptor tajmera, gore deklarisan
             5000,//koliko milisekundi cekanja(mislim daje ovo 5 sec, ali nisam siguran:)
             NULL);//timer funkcija nam sad nije potrebna
//....
//u win proceduri koja je registrovana u prozoru koji koristimo u tajmeru
switch (msg)
    {
    case WM_TIMER:
        switch(wparam)
        {
        case TIMER_1:
                              //ovdje radi sta ti je volja
                          break;
                          }
              //....
              }
//...

Nadam se da je sve jasno. :) Sad ce se dio koda koji stoji izmedju case TIMER_1 i break pozivati za vrijeme koje ti odredis u SetTimer funkciji.
Za detalje posjeti msdn.
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
194.106.167.*



Profil

icon Re: kako ubaciti timer?23.01.2006. u 08:11 - pre 222 meseci
Nisam sigurna da je to bas ono sto mi treba ali u svakom slucaju cu pokusati da iskoristim.
Hvala!
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
194.106.167.*



Profil

icon Re: kako ubaciti timer?23.01.2006. u 09:04 - pre 222 meseci
To je to! Hvala puno na pomoci. Kacim kod za buduce narastaje.

Code:

#include <windows.h>
#include "stdio.h"
#include "time.h"

#define TIMER_T 12345

const char g_szClassName[] = "myWindowClass";

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

    boolean processed;
    LRESULT result;

      result = 0;
      processed = false;

      switch (msg)
      {
        case WM_KEYDOWN:
          // taster je pritisnut!!!
          processed = true;
          printf("Pritisnut taster\n");
          break;


        case WM_KEYUP:
          // taster je pushten!!!
          processed = true;
          printf("Pusten taster\n");
          break;

        case WM_CLOSE:
          DestroyWindow(hwnd);
          PostQuitMessage(0);
          break;

        case WM_TIMER:
          DestroyWindow(hwnd);
          PostQuitMessage(0);
          break;      }

      if (!processed)
            result = DefWindowProc(hwnd, msg, wParam, lParam);

      return result;
}

int main()
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;
    HINSTANCE hInstance = NULL;
    
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = NULL;
    wc.hCursor       = NULL;
    wc.hbrBackground = NULL;
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = NULL;
    
    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx
    (    WS_EX_TOOLWINDOW,
        g_szClassName,
    //    TEXT(""),
        NULL,
        WS_POPUP,
        0, 0 , 0, 0,
        NULL,
        NULL,
        hInstance,
        NULL
    );
    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);

    int timer = 5000;
    SetTimer(hwnd,TIMER_T,timer,NULL);


    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);        
    }

    return Msg.wParam;
}

 
Odgovor na temu

[es] :: C/C++ programiranje :: kako ubaciti timer?

[ Pregleda: 1398 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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