Anonymní profil peter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil peter – Programujte.comAnonymní profil peter – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:2601:26c:b0ce:d6...–

peter
Delphi › Optimalizace obsluhy Sér.por…
26. 4. 2017   #215721

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...

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý