* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 19, 2024, 01:31:28 pm

Inserisci il nome utente, la password e la durata della sessione.

392 Visitatori, 0 Utenti

Autore Topic: Metodi (o altro) differiti  (Letto 613 volte)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Metodi (o altro) differiti
« il: Aprile 17, 2021, 02:53:36 pm »
Ciao,

vorrei porvi una domanda tecnica, a cui non ho mai trovato risposta.
C'è un modo per capire se un metodo (tipicamente una procedura, ma non solo) lavora in modo differito ?

Per differito intendo che eseguo il metodo e questo "ritorna" subito. Però gli effetti della chiamata si faranno vedere più avanti.

Faccio un esempio che sicuramente tutti conosceranno (a parte i Linuxiani puri forse  :P ):

1) sendmessage (Api di Windows);
2) postmessage (sempre Api di Windows);

Il primo è un metodo che ritorna solo dopo che viene eseguita tutta la sequenza di operazioni (cioè doposito del messaggio nella coda dei messaggi appopriata).

Il secondo invece è un metodo che ritorna immediatamente, e il messaggio verrà depositato secondo le tempistiche del sistema operativo).

Un altro abbastanza comune è il .Click, con cui si simula il "click" su un oggetto a schermo. Anche questo ritorna immediatamente, l'esecuzione dell'azione è differita sempre secondo le tempistiche del sistema operativo).

Non rispondetemi: "basta guardare il manuale, le istruzioni, etc ....." che non è vero. Nella maggior parte dei casi bisogna testare la singola chiamata per verificare il tutto.

E guardate che la cosa non è ininfluente come possa sembrare: ad esempio ci potrebbe essere un problema per cui il metodo differito non viene eseguito e magari non viene segnalato, etc ....

Saluti
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Metodi (o altro) differiti
« Risposta #1 il: Aprile 17, 2021, 04:42:30 pm »
Ciao.


Posta in questi termini mi fai pensare alle chiamate rientranti (o differite) vs chiamate bloccanti.
In genere la prima tipologia l'ho sempre associata allo start di un thread (o installazione di una isp se parliamo di micro controllori/vecchio msdos - gestore di interrupt del microprocessore in parole povere).
Le chiamate bloccanti sono le solite chiamate che terminano fatto quello che devono e il chiamate aspetta.


(Se ho capito bene, partiamo da una base nota a tutti).


Non ho mai avuto bisogno di capire (a runtime) se la chiamata che effettuavo era o meno differita. Controllavo se dovevo installare una callback a lavoro terminato per prendere l'eventuale risulto.


Magari se parliamo di un caso specifico e non in termini generici possiamo vedere come fare.


In termini generici, se salvi un semaforo (a database?) che ti dice quando è partita la richiesta differita (il tuo chiamare il metodo differito) con un thread puoi verificare un eventuale timeout e prendere le opportune incazzature via codice.


:)


Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Metodi (o altro) differiti
« Risposta #2 il: Aprile 17, 2021, 05:10:31 pm »
Era una domanda generica, legata alla situazione storica dove il sapere se un metodo è differito o bloccante poteva essere importante.

In genere non lo è, e usando le tecniche opportune come quelle che hai indicato (io uso spesso anche le funzioni atomiche Interlocked....) si può ovviare all'eventuale differimento.

A runtime ovviamente si sanno già lo cose e quindi difficilmete ci si trova nelle "pesti". E' più un problema progettuale, legato a delle scelte che possono variare in funzione proprio a queste situazioni.

Per chi lavora come me principalmente con Windows, che notoriamente non è un sistema REALTIME, finchè si tratta del proprio codice non ci sono problemi, ma quando si tratta di chiamate S.O. o anche dei componenti dell'ambiente di sviluppo allora mi pongo sempre in stato di allarme.

Io non risparmio i Thread, e ove ho sentore che qualcosa potrebbe avere qualche gabola, uso Waitfor, spin loop o altro a manetta.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Metodi (o altro) differiti
« Risposta #3 il: Aprile 17, 2021, 05:25:07 pm »
Faccio un esempio che potrebbe interessare (e riguarda un altro topic già discusso in questo forum).

Il metodo COMMIT (o POST) effettuato su un database è sincrono (cioè bloccante) o differito ?

Le prestazioni di un programma potrebbero essere influenzate da questo particolare. E' anche ovvio che probabilmente "blocco" o "differimento" dipendono dal motore del database e dalla tecnologia usata (non sò sparo a caso, un SQLite magari è bloccante mentre in una architettura Client/Server con MSSQLSERVER è differita).

Io, siccome non posso certo fare prove con tutto, ho preso la decisione di fare le Commit da un Thread, dove verifico anche che non ci siano errori e che il l'eventuale evento "AFTERCOMMIT" sia OK.
In questo modo che il COMMIT sia bloccante o no, non pregiudica ne le tempistiche del mio programma ne eventuali errori.

Ciao
 
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Metodi (o altro) differiti
« Risposta #4 il: Aprile 17, 2021, 06:06:24 pm »
Allora posso risponderti che ci sono anche i Framework che ci mettono del loro in questi casi  ;D
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Metodi (o altro) differiti
« Risposta #5 il: Aprile 17, 2021, 06:49:20 pm »
Allora posso risponderti che ci sono anche i Framework che ci mettono del loro in questi casi  ;D

Ah ah ah, vero. Uno dei più famosi (.NET), per non parlare degli altri che si usano per interfacciarsi con i vari SO, ci mettono tanto del loro.

Per questo almeno io cerco di evitarli il più possibile.

In campo industriale ce ne sono diversi, e hanno tutti queste problematiche (e per quello che sono sensibile all'argomento del TOPIC). Non si sà di preciso come operino, e tu quando ti interfacci devi solo confidare che il tutto funzioni come pensi e speri. Salvo che poi con l'esperienza non poni dei rimendi generali a priori.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 578
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 392
Total: 392

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.