Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Thread pool mantığı nasıl kurulmalı ?
#2
Muharrem bey merhaba ,
Tarif ettiğiniz iş için en doğru senkronizasyon yapısısının SEMAPHORE olacağını düşünüyorum, özet yapı olarak,  Semaphore u bir thread odası gibi düşünün içeride aynı anda çalıştırılacak thread sayısını belirliyorsunuz örn 10 , biten iş parçacığı yerine bekleyen yenisini  alıp işletiyor. Özel bir tecrübem olmadığı için kod paylaşımıyorum ama anahtar kelime vermiş olayım.
iyi çalışmalar.

Düzeltme ;
Size bu mesajı gönderdikten sonra Semaphore ile ilgili @Tuğrul HELVACI beyin  bana hazırladığı örneğe denk geldim , hemen paylaşıyorum. Örnekte 4 adet Thread var Semaphore 2 boyutuna sahip olarak oluşturulduğu için  , 4 thread aynı anda Start ediliyor ancak  beklendiği gibi aynı anda 2 si çalışacak şekilde senkronize oluyorlar.

unit uTest;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs,

 SyncObjs,
 CodeSiteLogging, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   ASemaphore : TSemaphore;

 public
   { Public declarations }
 end;


var
 Form1: TForm1;
 A,B,C,D,E : TThread;


implementation
uses
 System.Diagnostics;

{$R *.dfm}





procedure TForm1.Button1Click(Sender: TObject);
begin
 ASemaphore := TSemaphore.Create(nil, 2, 2, '');

 A :=
 TThread.CreateAnonymousThread(
   procedure
   begin
     TThread.CurrentThread.FreeOnTerminate := false;

     CodeSite.Send('Thread A Created and running');

     WaitForSingleObject(ASemaphore.Handle, INFINITE);
     Sleep(5000);
     ASemaphore.Release(1);

     CodeSite.Send('Thread A Exiting');
   end
 );

 B :=
 TThread.CreateAnonymousThread(
   procedure
   begin
     CodeSite.Send('Thread B Created and running');

     WaitForSingleObject(ASemaphore.Handle, INFINITE);
     Sleep(5000);
     ASemaphore.Release(1);

     CodeSite.Send('Thread B Exiting');
   end
 );

 C:=
 TThread.CreateAnonymousThread(
   procedure
   begin
     CodeSite.Send('Thread C Created and running');

     WaitForSingleObject(ASemaphore.Handle, INFINITE);
     Sleep(5000);
     ASemaphore.Release(1);

     CodeSite.Send('Thread C Exiting');
   end
 );

 D:=
 TThread.CreateAnonymousThread(
   procedure
   begin
     CodeSite.Send('Thread D Created and running');

     WaitForSingleObject(ASemaphore.Handle, INFINITE);
     Sleep(5000);
     ASemaphore.Release(1);

     CodeSite.Send('Thread D Exiting');
   end
 );

 A.Start;
 B.Start;
 C.Start;
 D.Start;


end;

end.
Cevapla


Bu Konudaki Yorumlar
Thread pool mantığı nasıl kurulmalı ? - Yazar: mrmarman - 12-12-2021, Saat: 14:47
Thread pool mantığı nasıl kurulmalı ? - Yazar: vkamadan - 13-12-2021, Saat: 10:12
Cvp: Thread pool mantığı nasıl kurulmalı ? - Yazar: vedat35 - 13-12-2021, Saat: 20:29
Thread pool mantığı nasıl kurulmalı ? - Yazar: mrmarman - 13-12-2021, Saat: 21:58
Cvp: Thread pool mantığı nasıl kurulmalı ? - Yazar: vedat35 - 13-12-2021, Saat: 22:53
Thread pool mantığı nasıl kurulmalı ? - Yazar: mrmarman - 14-12-2021, Saat: 07:20
Thread pool mantığı nasıl kurulmalı ? - Yazar: mrmarman - 14-12-2021, Saat: 21:37
Thread pool mantığı nasıl kurulmalı ? - Yazar: mrmarman - 15-12-2021, Saat: 08:49
Cvp: Thread pool mantığı nasıl kurulmalı ? - Yazar: vedat35 - 15-12-2021, Saat: 12:22

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 321 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  TMS Web Core- REST İşlemlerini Nasıl Yapabilirim? kajmerantime 0 426 13-06-2025, Saat: 14:07
Son Yorum: kajmerantime
  Thread içinde Web Browser Çalışırmı adelphiforumz 0 433 09-01-2025, Saat: 13:22
Son Yorum: adelphiforumz
  Delphi 7 deki pencereleri nasıl sabitleyebilirim? mxpain 1 553 12-12-2024, Saat: 08:50
Son Yorum: 3ddark
  resimdeki hatanin satirini nasil bulabiliriz. sadikacar60 6 1.110 25-11-2024, Saat: 19:18
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi