Nezkoumal jsem, jak to presne funguje v delphi, thredy a pod, ale obecne je to reseni pres casovace. Neco, jako mas ve windows Planovac uloh, Procesy.
Priklad 1: Mas treba funkci 'zobraz kurzor mysi'. Tato funkce se opakovane spousti treba kazdych 20 ms. Funkce precte data z portu, zobrazi sipecku na x,y, prepise ve vnejsim objektu mysi souradnice a prida i informaci o tom, jake tlacitko jsi zmackl. Pokud pak spustis nejaky program, ktery zjistuje polohu mysi, tak se pta toho vnejsiho objektu.
Priklad 2: Webova stranka, ajax nebo nacitani obrazku (asynchronni prenos)
Tam je program, co si vykresluje stranku. Spusti treba 5 casovacu pro stahovani obrazku. A ty maji callback funkci, ktera se spusti, az stahovani skonci. Cili to funguje uplne stejne jako priklad 1 s tou mysi.
prenos = {} prenos.data = '' prenos.callback = null prenos.start = function (url, callback) { prenos.callback = callback; prenos.transferStart(url); } prenos.stop = function () {prenos.callback(prenos.data)} prenos.transferStart = function () {inicializace...} prenos.transferRun = function (newdata) {prenos.data += newdata; if (newdata==end_znak) {prenos.transferStop()}} prenos.transferStop = function () {zastaveni... prenos.stop()} function zobraz(data) {alert(data);} // alert('ahoj') prenos.start('https://seznam.cz', zobraz); // start: callback - je pointer na funkci // stop: spusteni funkce prenos.callback(prenos.data) // stop: Tez se to v javascriptu pise jako volani funkce z globalniho // objektu/pole window, window[prenos.callback](prenos.data) // Jakoze vytvaris vsechny promenne do window // window.prenos = {} // window.prenos.callback = ...
// alert: js funkce, ktera zobrazi okenko typu 'alert' s textem
Spoustis to v programu prikazem
To zaradi do systemoveho casovace prikaz
prenos.transferRun(), rekneme s opakovanim 20ms a kontrolou stavu, zda uz sam nebezi
Kdybys nekontroloval stav, tak ti tam treba vytvori, nez ta funkce dobehne, dalsich 50 spusteni, treba.
Kazdych 20 ms se pak pokusi zkontaktovat server a pozadat ho o dalsi cas stranky seznam.cz. Kdyz se to nezdari, tak proste ni, zkusi to priste. Tohle dela, dokud prenos neskonci nebo mu to nevykrizkujes (treba tlacitkem: zastavit stahovani). Podobne jako ten kurzor mysi, ten zobrazuje stale.
udelej predtim...
prenos...
udelej potom...
ostatni program...
function fcePotom(prijata_data) {udelej potom...}
udelej predtim...
fcePrenos(fcePotom);
ostatni program...
To jen, jak to funguje principialne...