* * * *

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 22, 2025, 12:21:04 am

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

190 Visitatori, 0 Utenti

Autore Topic: Errore Multithread  (Letto 6516 volte)

Diego1981

  • Full Member
  • ***
  • Post: 180
  • Karma: +0/-0
Errore Multithread
« il: Febbraio 12, 2016, 08:45:20 am »
Ciao Ragazzi
nella mia applicazione creo una serie di thread , circa una decina, dove ogni thread corrisponde ad un timer;ogni tanto ma non sempre mi restituisce un errore
"Thread creation error:Memoria insufficiente per eseguire il comando"
Visto che la cosa è saltuaria non riesco a capire l'errore e pensavo che magari qualcuno avesse una dritta da darmi.
Grazie

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3317
  • Karma: +12/-0
Re:Errore Multithread
« Risposta #1 il: Febbraio 14, 2016, 09:46:56 am »
Ciao ti consiglio di mettere dei try in ogni funzione e salvare un log dell'errore da qualche parte e poi analizzi. Diversamente dalle info che hai dato non è possibile capire molto
Ieri è passato, domani è futuro, oggi è un dono...

Diego1981

  • Full Member
  • ***
  • Post: 180
  • Karma: +0/-0
Re:Errore Multithread
« Risposta #2 il: Febbraio 14, 2016, 10:30:27 pm »
ciao xiny
il blocco è già in un blocco try-except e non mi dice nulla di più di quanto scritto comunque cerco di vedere se posso approfondire come dici tu
grazie

bonmario

  • Hero Member
  • *****
  • Post: 1403
  • Karma: +11/-1
Re:Errore Multithread
« Risposta #3 il: Febbraio 15, 2016, 08:02:02 am »
A me capitò la stessa cosa e, se non ricordo male, alla fine si trattava di un memory leak: di un oggetto non facevo la "free + nil" alla fine del suo utilizzo e, dopo un po' di tempo, mi dava quell'errore.
Io mi ero reso conto della cosa tenendo sotto occhio il mio applicativo da "gestione risorse", dove vedevo che più passava il tempo, più mi occupava memoria.

Ciao, Mario

Diego1981

  • Full Member
  • ***
  • Post: 180
  • Karma: +0/-0
Re:Errore Multithread
« Risposta #4 il: Febbraio 17, 2016, 10:07:00 pm »
Ciao Mario
proverò a tenere sott'occhio la memoria del processo ma il freeandnill lo faccio alla fine dell' execute del thread.
Ti posto il codice cosi magari imparo qualcosa  ;D
Alla fin fine il thread non è altro che un conto alla rovescia

procedure TimerThread.Execute;
var
  i:Integer;
begin
  attesa:=attesa*1000;
  i:=1000;
  repeat
    Sleep(1000);
    i:=i+1000;
    if i=attesa then
      interrompithr:=True;
  until interrompithr=True;
    if SpegniOut then
      FR_Principale.ElabThread.AttDisOutDg(noutcom,'00');
  FreeAndNil(FR_Principale.TimerOff[noutcom]);
end;

ovviamente accetto critiche
grazie
Diego

bonmario

  • Hero Member
  • *****
  • Post: 1403
  • Karma: +11/-1
Re:Errore Multithread
« Risposta #5 il: Febbraio 18, 2016, 07:58:25 am »
Ciao,
intendevo "qualche oggetto" in generale, non per forza l'oggetto del thread, magari qualcosa che chiami al suo interno, ad esempio dalla "FR_Principale.ElabThread.AttDisOutDg".
Pensa che nel mio caso la colpevole era una procedura creata 3 o 4 anni prima, che nei miei test dei thread andavo a chiamare migliaia di volte, cosa che fino a quel momento non mi era mai capitato di fare !!!

Ciao, Mario

SB

  • Scrittore
  • Sr. Member
  • *****
  • Post: 283
  • Karma: +1/-0
Re:Errore Multithread
« Risposta #6 il: Febbraio 21, 2016, 08:27:30 am »
      FR_Principale.ElabThread.AttDisOutDg(noutcom,'00');
  FreeAndNil(FR_Principale.TimerOff[noutcom]);

Se ho capito bene, da un thread invochi un metodo di un oggetto (globale?) e poi distruggi un altro oggetto (globale?)...
Mi sembra una gran brutta cosa... sei fortunato che di norma funzioni...
Tutto dipende da come hai scritto il codice rimanente, ma secondo me per principio dovresti isolare un po' meglio i thread.


Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2391
  • Karma: +10/-0
Re:Errore Multithread
« Risposta #7 il: Marzo 05, 2016, 01:25:39 am »
Ciao. Ti conviene mettere quello.che crei a distruggi dentro il thread o semaforizzare l'accesso a risorse (puntatori) esterni al thread. Come principio.
Se il thread di serve come "linea di ritardo" cerca altre strade. Un timer è più che sufficiente. Se è un tool solo per Windows quello.che stai scrivendo, pensa alla api di winzoz. Waitobjet (vado a memoria) dovrebbe essere più che sufficiente 😊
Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

 

Recenti

How To

Utenti
  • Utenti in totale: 817
  • Latest: alex6891
Stats
  • Post in totale: 19696
  • Topic in totale: 2367
  • Online Today: 193
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 190
Total: 190

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.