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 ?
Dobře.
Může mi někdo vysvětlit tento kratičký kód ?
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 ?
Tímto ukončuji tento monolog.
Děkuji za spolupráci.
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