Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno wxWidgets - timer nepracuje, ale vraci, že běží - true

Takto má býti implementován timer dle manuálu:

class MyFrame : public wxFrame
{
public:
    ...
    void OnTimer(wxTimerEvent& event);

private:
    wxTimer m_timer;
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_TIMER(TIMER_ID, MyFrame::OnTimer)
END_EVENT_TABLE()

MyFrame::MyFrame()
       : m_timer(this, TIMER_ID)
{
    m_timer.Start(1000);    // 1 second interval
}

void MyFrame::OnTimer(wxTimerEvent& event)
{
    // do whatever you want to do every second here
}

Já to mám takto:

class MyFrame : public wxFrame
{
public:
    ...
    void OnTimer(wxTimerEvent& event);

private:
    wxTimer m_timer;
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_TIMER(TIMER_ID, MyFrame::OnTimer)
END_EVENT_TABLE()

MyFrame::MyFrame()
{
tady mam neco jineho 
}

MyFrame::Vyvolejtimer()
{
m_timer.Start(1000);     // Zahajim casovani timeru kazdou vterinu

if(m_timer.IsRunning())
wxMessageBox("Potvrzuji, ze ten chcipak jede  !");     // Toto se provede 


}


void MyFrame::OnTimer(wxTimerEvent& event)
{
    // do whatever you want to do every second here

wxMessageBox("JEDE !!!");   //  Timer spustil funkci toto nefungujeeee !!!!!!!!!!!!!! Sem se nedostane

}

Jak si lze vsimnout mam tam nepatrny rozdil, kompilator nepise chyby zadne, ale funkce, ktera ma probehnout kazdou vterinu se neprovede ani 1x !!! :.(

Nevidite tam nejakou chybu ? 3-[

Předmět Autor Datum
Dobře. :.( Může mi někdo vysvětlit tento kratičký kód ? MyFrame::MyFrame() : m_timer(this, TIMER_I…
Flash_Gordon 29.01.2007 19:03
Flash_Gordon
Tímto ukončuji tento monolog. Děkuji za spolupráci. MujTimer = new wxTimer(); //založíme instanci M…
Flash_Gordon 29.01.2007 19:47
Flash_Gordon
Zaujimave asi bolo aj ze co (kolko) je TIMER_ID a kolko je ID_WXTIMER1. .. ptz. timerov v aplikacii… poslední
MM.. 29.01.2007 20:07
MM..

Dobře. :.(

Může mi někdo vysvětlit tento kratičký kód ?

MyFrame::MyFrame()
       : m_timer(this, TIMER_ID)
{
    m_timer.Start(1000);    // 1 second interval
}

Konkrétně: MyFrame::MyFrame()
: m_timer(this, TIMER_ID)

Chybí mi tam jen to : m_timer(this, TIMER_ID)

A v jiné funkci spouštím timer jako:

m_timer.Start(1000);

Myslíte, že by to mohl být kámen úrazu ? :-(

Zaujimave asi bolo aj ze co (kolko) je TIMER_ID a kolko je ID_WXTIMER1.
.. ptz. timerov v aplikacii moze byt vela a kazdy ma svoje cislo. Ty si spustil timer ale nikde si pri spustani nezadefinoval pod akym cislom, a potom si cakal na timer cislo ID_TIMER.
Tym nastavenim vlasttnika si vlastne pred spustenim asi len nastavil ake cislo bude mat ten timer...

To je tak ked sa robi so vselijakymi widgetmi a nie s WinAPI. S WinAPI je to uplne jasne podla MSDN a funguje to vyborne... ;-)

P.S. este nieco. Ty si v triede MyFrame uz vytvaras instanciu my_timer, tak naco pouzivas zas new? mas tam potom zbytocne 2 objekty triedy timer.

Ten riadok znamenal tusim ze sa pouzije konstruktor toho wxTimer s parametrami, t.j. akokeby si urobil
m_timer_ptr = new wxTimer(this, TIMER_ID);

tak ako si to mal, ti IMHO staci pred riadok
m_timer.Start(1000)
napisat riadok
m_timer.SetOwner(this, TIMER_ID); // nastav cislo timeru

Zpět do poradny Odpovědět na původní otázku Nahoru