Zaslal: út 02. leden, 2007 23:06 Předmět: Programování Palm OS aplikace na pozadí
Zdravim,
kniha o programovani pro PalmOS (www.palmos.wz.cz) nekolikrat zduraznuje, ze v jednu dobu je mozne mit spustenou pouze jednu aplikaci.
Avsak jabber klient Chatopus dokaze bezet na pozadi, a udajne fungoval uz v PalmOS4.
Chtel bych se zeptat ohledne tohoto rezimu a jestli nekde existuje tutorial, ze ktereho bych vycetl, jak se programuje kod pro beh v rezidentnim rezimu.
Nejsem sice expert, a nedám ti tu ani odkaz na tutorial, ale tzv. běh na pozadí se realizuje přes tzv. notifikace, což je jakási obdoba událostí ve Windows.
Zjednodušeně řečeno, každá aplikace, která chce běžet na pozadí, si zaregistruje tzv. notifikaci, která je obvykle spojena s určitou událostí. Např. pokud si nějaká aplikace zaregistruje notifikaci k události od časovače, tak v určitých časových intervalech bude systém spouštět právě tuto aplikaci. Aplikace pak musí vyhodnotit o jakou událost se jedná, a provést činnost, pro kterou byl daný program napsán.
Typů událostí je samozřejmě víc. Stačí se podívat do dokumentace, která se dá stáhnout z webových stránek firmy access.
Registrace: 24.2. 2004 Příspěvky: 2930 Bydliště: Praha
Zaslal: út 02. leden, 2007 23:51 Předmět: Re: Rezidentni aplikace
zet napsal:
Chtel bych se zeptat ohledne tohoto rezimu a jestli nekde existuje tutorial, ze ktereho bych vycetl, jak se programuje kod pro beh v rezidentnim rezimu.
Funguje to podobně jako fungovaly tzv. "rezidentní programy" v MS-DOSu. Když budeš programovat aplikaci pro Palm OS, tak vymezuješ, kolik % času zabere (většinou se do základní smyčky dává 100%), pokud dáš méně, tak se pouze něco otestuje a aplikace zase přepustí řízení vyšší aplikaci. Podobně jako tomu bylo u rezidentů, pouze se čeká, zda nastala situace pro obsluhu požadavku, tedy po malých časových kvantech se vykonává operace na pozadí jiných.
Bohužel česky k tomuto nevyšlo nic, ale když se přihlásíš do Palmí programátorské konference, tak tam můžeš potřebné informace získat, viz. www.palmos.com/dev/support/forums/.
Jde o to, kdyz budu delat nejakeho sitoveho klienta, aby se po tu dobu mezi notifikacema udrzel pripojen, kdyz je vlastne prakticky vypnuty.
Hawk napsal:
Nejsem sice expert, a nedám ti tu ani odkaz na tutorial, ale tzv. běh na pozadí se realizuje přes tzv. notifikace, což je jakási obdoba událostí ve Windows.
Registrace: 22.12. 2004 Příspěvky: 1086 Bydliště: Praha
Zaslal: st 03. leden, 2007 0:33 Předmět:
zet napsal:
Jde o to, kdyz budu delat nejakeho sitoveho klienta, aby se po tu dobu mezi notifikacema udrzel pripojen, kdyz je vlastne prakticky vypnuty.
Melo by to jit tak, ze vytvoris pripojeni a zaregistrujes si patricnou notifikaci. Kdykoliv potom prijdou nejaka data z vytvoreneho spojeni (i kdyz tvuj program nebezi), zavola se funkce urcena pro zpracovani teto notifikace (ta kterou jsi nadefinoval ve svem programu) a ty mas sanci na udalost reagovat. Nepotrebujes tedy neustale bezet, staci ti reagovat na udalosti. Vetsina GUI i sitovyho programovani je stejnak udalostmi rizena. _________________ Palm m125 --> Tungsten T --> Palm TX (s vibracema) (Ale mam je doma jeste porad vsechny )
Melo by to jit tak, ze vytvoris pripojeni a zaregistrujes si patricnou notifikaci. Kdykoliv potom prijdou nejaka data z vytvoreneho spojeni (i kdyz tvuj program nebezi), zavola se funkce urcena pro zpracovani teto notifikace (ta kterou jsi nadefinoval ve svem programu) a ty mas sanci na udalost reagovat. Nepotrebujes tedy neustale bezet, staci ti reagovat na udalosti. Vetsina GUI i sitovyho programovani je stejnak udalostmi rizena.
Problem je, ze jsem v dokumentaci k API v seznamu notifikaci nasel jen jednu, ktera se tyka site:
sysNotifyNetLibIFMediaEvent
ale ta pouze oznamuje pripojeni/odpojeni, ale ne vlastni data
Treba Hotsync aplikace v palmu takovy thread pouziva pro komunikaci s PC. Kdysi jsem ji dekompiloval na OS3 .5 (Vx) nebo 4.1 (m500) uz nevim presne.
Oficialne takove veci nejdou U PalmOS <5 to je proto ze se Palm licencne zavazal (dodavateli mikrokernelu Kadak) ze tohle API nespristupni programatorum (jinak by asi platil vetsi poplatky). U OS 5 maji uz mikrokernel svuj ale nativni ARM API kde to jde taky je utajeno zase z jinych duvodu (dlouhe povidani). V praxi to v celku funguje (vlakna jsem osobne nezkousel) ale clovek se pousti na tenky led mozne nekompatibility. Vic detailu treba
http://yahm.palmoid.com/yahmv.htm http://www.mobile-stream.com/devzone.html
ale co se tyce tohoto konkretniho problemu tak bych na OS < 5.4 pouzil obycejny alarm (asi funkci AlmSetProcAlarm) a vzdycky ji pri zavolani nascheduloval zas o par sekund pozdeji
http://www.palmos.com/dev/support/docs/palmos/PalmOSReference/AlarmManager.html
Nebo nekdo vi o nejake sikovnejsi notifikaci ktera by garantoval ze se zavola v nejakem case?
Diky za reakce.
Takze predpokladam, ze kdybych to volal po nejakych intervalech, tak by se mezitim plnil nejaky buffer socketu, a ten bych vzdycky vybral.
jo, tak jsem to myslel. Buffer se bude plnit sam, sitova knihovna ma svuj vlastni systemovy thread (stejne jako bluetooth nebo zvuk) takze v tom problem neni. Akorat je ten buffer asi omezeny takze je nutne socket obcas obslouzit. Pokud se socket nastavi jako non-blocking tak by melo stacit v alarmu z neho akorat vycist co v nem zrovna je, pripadne zkusit poslat dalsi data. Horsi je ze v obsluze alarmu nemas globalni promenne takze je nutne si pred ukoncenim hlavni aplikace nechat vsechno potrebne otevrene a ulozit si vsechny data nekam do struktury do pameti, pamet pridelit systemu aby se sama neuvolnila a pointer na strukturu si dat treba do featury (FtrSet) a v alarmu si ji precist (FtrGet) vytahnout si potrebne data (pointer na socket atd.) a sitove data pak treba zapisovat/cist nejlip do/z nejake svoji databaze kterou hlavni aplikace necha pred ukoncenim taky otevrenou. Je to slozite ale v zasade by to melo fungovat.
Ted jsem zkousel ten chatopus dat na pozadi (pustit jinou aplikaci), a kdyz jsem si poslal zpravu, tak dosla okamzite (muselo to byt pod 0.1s, protoze jsem si nevsiml zpozdeni), a to jsem udelal nekolik pokus. takze ty intervaly musi byt strasne kratke, pokud to dela timhle zpusobem
Časy uváděny v GMT + 1 hodina Přejít na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru.