Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: xinyiman - Ottobre 04, 2012, 07:23:28 pm

Titolo: Errore multhitreading
Inserito da: xinyiman - Ottobre 04, 2012, 07:23:28 pm
Ciao ragazzi stò lavorando con il multhitreading e mi da questo errore:

unit_multithreading.pas(282,66) Error: Call by var for arg no. 1 has to match exactly: Got "TRTLCriticalSection" expected "LongWord"


La riga incriminata è:

EnterCriticalsection(Principale.Frm_Principale.ACriticalSection);
Titolo: Re:Errore multhitreading
Inserito da: nomorelogic - Ottobre 04, 2012, 07:48:59 pm
non ho sottomano lazarus...
com'è la dichiarazione di EnterCriticalsection?
Titolo: Re:Errore multhitreading
Inserito da: bonmario - Ottobre 04, 2012, 08:23:32 pm
Prova a verificare l'ordine delle "Uses". Se non ricordo male ho avuto lo stesso problema 2 settimane fa' quando facevo i miei esperimenti con i thread. Questa è la mia dichiarazione:
Codice: [Seleziona]
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  LCLProc, LCLType, LCLIntf, {Queste 3 sono usate per la CriticalSection}
  StdCtrls, ExtCtrls
  ;

Ciao, Mario
Titolo: Re:Errore multhitreading
Inserito da: Stilgar - Ottobre 04, 2012, 09:12:30 pm
Ciao,
 come hai dichiarato quella variabile che usi?
Codice: [Seleziona]
procedure EnterCriticalsection(var cs : TRTLCriticalSection);
Per il "non WinCE" è definita in questa maniera ...
Codice: [Seleziona]
  TRTLCriticalSection = packed record
    DebugInfo : pointer;
    LockCount : longint;
    RecursionCount : longint;
    OwningThread : THandle;
    LockSemaphore : THandle;
    SpinCount : ULONG_PTR;
  end;       
Il compilatore si inca... perchè non trova una longWord, a occhio e croce c'è qualche problema con il "var" della dichiarazione.

Spulciando il codice della libraria ... usa un thread manager per entrare nella sezione critica.
Codice: [Seleziona]
  TCriticalSectionHandler = Procedure (var cs);
Stai compilando su/per linux per caso?
Altra domanda idiota (forse) che piattaforma usi (32/64 bit)


Titolo: Re:Errore multhitreading
Inserito da: xinyiman - Ottobre 05, 2012, 07:20:24 am
Programmo su linux a 32 bit. Ma la cosa buffa e' che quel codice in passato lo avevo gia compilato
Titolo: Re:Errore multhitreading
Inserito da: Stilgar - Ottobre 05, 2012, 02:35:50 pm
Allora è cambiato qualche cosa nelle librerie?
Titolo: Re:Errore multhitreading
Inserito da: xinyiman - Ottobre 06, 2012, 03:55:12 pm
Esattamente e ho risolto anche l'arcano mistero. Era la unit LCLIntf che gli da fastidio. Io ho tolto le funzioni che la richiedevano e ho risolto :)