Re: Re: C++ timer v objektu
František Burian
BuFran@seznam.cz
Úterý Srpen 4 10:33:16 CEST 2009
A co wrapper? pro každý callback můžete nastavit nějaký int v návratové hodnotě, pro identifikaci kontextu
probíhajícího callbacku. No a kdo říká že ten int nemůžete interpretovat jako pointer na instanci objektu ?
void callback_wrapper(int ctx)
{
MujObjekt *obj = dynamic_cast<MujObjekt*>((void*)ctx)
if (obj)
obj->MetodaObjektu();
}
Zlaté C++ :-)
Mno a kdyby namítal někdo, že v okamžiku vyvolání callbacku už nebude exstovat objekt toho callbacku,
tak to lze řešit trošku složitějším wrapperem, který při konstuktoru se vloží do tabulky živých objektů LOT,
a při destruktoru se vyjme z LOT, no a ta funkce callback wrapperu si ještě mimo kontroly na NULL
ještě zkontroluje jestli je v tabulce LOT.
Tohle půjde použít tam, kde sizeof(int)==sizeof(int*), takže to není plně portabilní, ale každý design
callbacků s tímto přístupem počítá, originálně však počítá s pointerem na strukturu, ale objekt je
vlastně trošku nabubřelá struktura.
Použité zkratky:
LOT: Living Objects Table
Wrapper: programový vazač dvou nesvázatelných věcí
Hodně štěstí :-)
< ------------ Původní zpráva ------------
< Od: Miroslav Šinko <sinkomiro@gmail.com>
< Předmět: Re: C++ timer v objektu
< Datum: 04.8.2009 00:45:28
< ----------------------------------------
< Musite mat smernik na funkciu. Ak je funkcia metodou triedy, musi
< existovat instancia objektu pre danu triedu. Typicky pre Win32 to
< mozte riesit static metodou triedy so vsetkym, co s tym suvisi.
<
< miro
<
< 2009/8/3, Va_Sm <spiritusII@seznam.cz>:
< > Zdravim,
< > zajimalo by me, jak vyresit problem, kdy mam objekt, kde jedna z metod
< > zapne timer a po jeho uplynuti se vyvola jina metoda(callback funkce)
< > obsazena v tomto objektu? Nemate nekdo vhodny prikladik, ktery toto resi
< > a v kterem bych se mohl inspirovat?
< > dekuji
< > VS
< _______________________________________________
< HW-list mailing list - sponsored by www.HW.cz
< Hw-list@list.hw.cz
< http://list.hw.cz/mailman/listinfo/hw-list
<
<
<
Další informace o konferenci Hw-list