* * * *

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.
Novembre 26, 2024, 11:37:49 pm

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

92 Visitatori, 1 Utente
 

Autore Topic: Capire se una procedura o una funzione sta girando in un thread  (Letto 4728 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Capire se una procedura o una funzione sta girando in un thread
« il: Dicembre 21, 2012, 07:58:26 am »
Ciao a tutti,
temo di sapere gà la risposta, ma vale la pena tentare ...
Una procedura/funzione che può essere richiamata da vari programmi, può capire se sta girando in un thread?

Grazie in anticipo, Mario

Microges2000

  • Global Moderator
  • Full Member
  • *****
  • Post: 130
  • Karma: +1/-0
    • Power of Nature
Re:Capire se una procedura o una funzione sta girando in un thread
« Risposta #1 il: Dicembre 21, 2012, 08:03:52 am »
Allora conta che qualsiasi oggetto è un thread separato, quindi no in quanto già fa parte di un thread.
Poi se intendi un oggetto TThred la risposta è ancora no a patto che semafori la procedura richiamandola con una flagbooleana come OkStoInUnThread o similari.

Ovviamente se fai una cosa simile (all'interno del thread)

Codice: [Seleziona]
Procedure MyThread.Execute;
Begin
   Repeat
     DentroThread := True;
     <qui' le tue chiamate>
     DentroThread := False;
   Until Terminated;
End;

dove DentroThread è una booleana globale non va bene lo stesso in quanto un altro oggetto puo' benissimo chiamare la tua procedura mentre la variabile è True
Il possibile lo abbiamo già fatto, l'impossibile lo stiamo facendo, per i miracoli ci stiamo attrezzando

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Capire se una procedura o una funzione sta girando in un thread
« Risposta #2 il: Dicembre 21, 2012, 08:30:37 am »
Grazie per la risposta ... in effetti avevo poche speranze !!!
Il "fatto" è che ho scoperto i thread solo da qualche mese. Nel frattempo ho tonnellate di procedure/funzioni scritte negli anni che utilizzo per svariati motivi che, per non far sembrare il programma bloccato, ogni tanto lanciano una Application.ProcessMessages.
Le stesse uty, lanciate dentro un thread, lo fanno terminare nel momento in cui eseguono la Application.ProcessMessages. Speravo di poter evitare di aggiungere un parametro a tutte queste procedure per gestire la cosa.

P.S. Nel metodo che mi hai consigliato tu, se DentroThread fosse una booleana residente in una unit, funzionerebbe lo stesso?

Ciao e grazie, Mario
« Ultima modifica: Dicembre 21, 2012, 08:33:40 am da bonmario »

Microges2000

  • Global Moderator
  • Full Member
  • *****
  • Post: 130
  • Karma: +1/-0
    • Power of Nature
Re:Capire se una procedura o una funzione sta girando in un thread
« Risposta #3 il: Dicembre 21, 2012, 10:29:26 am »
No non funzionerebbe.

Cerca di pensare il programma cosi':

Il main chiama l'oggetto primaro (primo thread), ogni oggetto chiamato è un thrread a se stante oltre a quelli (oggetti TThread) che hai dichiarato tu.
Alla fine hai almeno un 8-10 thread che girano contemporaneamente dove gli oggetti TThread non sono controllabili in quanto dotati di "vita propria" mentre gli oggettti che usi si
Il possibile lo abbiamo già fatto, l'impossibile lo stiamo facendo, per i miracoli ci stiamo attrezzando

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Capire se una procedura o una funzione sta girando in un thread
« Risposta #4 il: Marzo 03, 2016, 01:49:28 pm »
Girovagando nei sorgenti di FPC 3.0.0 per altri motivi, credo di aver trovato la risposta alla mia domanda:
Codice: [Seleziona]
    if (GetCurrentThreadID = MainThreadID) then begin
      La procedura sta girando nel thread principale
    end else begin
      La procedura sta girando in un thread secondario
    end;

Per il momento l'ho testata sotto Windows XP in un paio di programmi e funziona alla grande.
Stasera la testo su Linux.

Ciao, Mario

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Capire se una procedura o una funzione sta girando in un thread
« Risposta #5 il: Marzo 03, 2016, 06:32:17 pm »
Ho appena provato sul mio Ubuntu 64 bit e funziona anche con Linux !!!!

Se qualcuno ha voglia e tempo di fare un test anche con altre versioni di FPC o sistemi operativi, magari avremmo una ulteriore conferma.

Grazie, MArio

doc

  • Jr. Member
  • **
  • Post: 96
  • Karma: +2/-0
  • "L'Ingegnere sa quello che fa e fa quello che sa".
    • Spagnotto Ing. Mirko
Re:Capire se una procedura o una funzione sta girando in un thread
« Risposta #6 il: Marzo 27, 2021, 10:52:13 pm »
Funziona anche con Debian (v. 10.9)  ;D   e con winzozz 10; macchine a 64bit.  ;)
FPC v. 3.2.0.

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19208
  • Topic in totale: 2289
  • Online Today: 98
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 92
Total: 93

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.