Critical section - jel zna neko

1

Critical section - jel zna neko

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

  1. function TProcessThread.GetFileFromList: string;
  2. var
  3.    cs:TRTLCriticalSection;
  4. begin
  5. (*
  6.    InitCriticalSection(cs);
  7.    {$IFDEF windows}
  8.      EnterCriticalSection(cs.LockCount);
  9.    {$ELSE}
  10.      EnterCriticalSection(cs.__m_count);
  11.    {$ENDIF}
  12.  *)
  13.    result:=FileList.strings[0];
  14.    FileList.Delete(0);
  15.  
  16.  (*
  17.    {$IFDEF windows}
  18.      LeaveCriticalSection(cs.LockCount);
  19.    {$ELSE}
  20.      LeaveCriticalSection(cs.__m_count);
  21.    {$ENDIF}
  22.    DoneCriticalsection(cs);
  23.   *)
  24. end; 


ovo sto je komentovano, ne kompajlira zbog Linux dela : EnterCriticalSection(cs.__m_count);

jel zna neko kako se radi sa CriticalSection u lazarusu?

Dopuna: 29 Avg 2006 15:31

Zapravo, kad se odkomentuje Windows deo, ni to ne radi



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Koliko znam treba da pise:

  1. Critical: TRTLCriticalSection;
  2.  
  3. InitializeCriticalSection(Critical);
  4. EnterCriticalSection(Critical);
  5. LeaveCriticalSection(Critical);
  6. DeleteCriticalSection(Critical);


Ovaj kod bi trebalo da radi na svim platformama.



offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

[Link mogu videti samo ulogovani korisnici]
[Link mogu videti samo ulogovani korisnici]

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

@Srki

unProcess.pas(82,35) Error: call by var parameters have to match exactly: Got "TRTLCriticalSection" expected "LongInt"

@Bobby
Primer sa wikija nema to, primer iz drugog linka kreira gresku odozgo

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Ok... evo ispravke koja radi (program se kompajlira i radi kada se pokrene). Napravio sam nov projekat, postavio dugmence i u OnClick event napisao ovo:

  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   Critical: TRTLCriticalSection;
  4. begin
  5.   InitCriticalSection(Critical);
  6.   EnterCriticalSection(Critical);
  7.   LeaveCriticalSection(Critical);
  8.   DoneCriticalsection(Critical);
  9. end;

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Pa meni to ne radi..

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Hajde kopiraj definicije funkcija InitCriticalSection, EnterCriticalSection, LeaveCriticalSection i DoneCriticalsection iz Lazarusa pa da vidimo... koristim 0.9.16 verziju Lazarusa.

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

I ja koristim istu verziju, koju sam za windoze skinuo pre 4 dana sa sajta. Posto sam reinstalirao suse, nemam linux verziju, ali mi se apsolutno isto deshavalo.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Hajde kopiraj definicije tih funkcija iz source... sigurno ima razlike kad nece da se iskompajlira.

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Reshio sam to.

  1. uses SyncObjs...
  2.  
  3. function TProcessThread.GetFileFromList: string;
  4. var
  5.    Critical:TCriticalSection;
  6. begin
  7.   critical:=TCriticalSection.Create;
  8.   try
  9.   Critical.Acquire;
  10.    result:=FileList.strings[0];
  11.    FileList.Delete(0);
  12.   Critical.Release;
  13.   finally
  14.     critical.Free;
  15.   end;
  16. end;


Drugi problem... jel zna neko kako da resizujem JPG?

  1. jpg := TJPEGImage.create;
  2.     try
  3.       jpg.LoadFromFile(infile);
  4.       // LAZARUS BUG u sledecoj
  5.       bmp.canvas.StretchDraw(Rect(0,0,AWidth,AHeight),jpg);
  6.     finally
  7.       jpg.Free;
  8.     end;       
  9. .....


StrechDraw je toliko bagiran da izlazi skroz zeznuta slika.
Jel zna neko kako da napravim resize?!

Ko je trenutno na forumu
 

Ukupno su 855 korisnika na forumu :: 10 registrovanih, 1 sakriven i 844 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 4thFlavian, Avangard, djuradj, famoso, HrcAk47, Japidson, kaskadija, mackenzie, markomacii9, Otto Grunf