Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kim korkar Semaphore'dan
#1
Minik bir Semaphore örneği paylaşmak istedim.

video yeni yüklendiği için kalitesi şu an düşük görünebilir.






unit USemaphore;

interface

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

type
 TSemaForm = class(TForm)
   GroupBox1: TGroupBox;
   GroupBox2: TGroupBox;
   GroupBox3: TGroupBox;

   iceridekilist: TListBox;
   bekleyenlist: TListBox;
   cikanlist: TListBox;

   CreateButton: TButton;
   procedure FormCreate(Sender: TObject);
   procedure AddList(Text: String; Wait: Integer);
   procedure NewSemaphore(Text: String);
   procedure CreateButtonClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 SemaForm: TSemaForm;
 MySemaphore: THandle;
 a: integer = 0;

implementation

{$R *.dfm}

procedure TSemaForm.AddList(Text: String; Wait: Integer);
begin
 case Wait of
   0: // Bekliyor listesine ekle
     begin
       TThread.Queue(nil,
         procedure
         begin
           bekleyenlist.Items.Add(Text);
         end);
     end;
   1: // İçeride listesine ekle
     begin
       TThread.Queue(nil,
         procedure
         var
           i: integer;
         begin
           for I := 0 to bekleyenlist.Count - 1 do
           begin
             if bekleyenlist.Items[i] = Text then
             begin
               bekleyenlist.Items.Delete(i);
               iceridekilist.Items.Add(Text);
               Break;
             end;
           end;
         end);
     end;
   2: // Bitti listesine ekle
     begin
       TThread.Queue(nil,
         procedure
         var
           i: integer;
         begin
           for I := 0 to iceridekilist.Count - 1 do
           begin
             if iceridekilist.Items[i] = Text then
             begin
               iceridekilist.Items.Delete(i);
               cikanlist.Items.Add(Text);
               Break;
             end;
           end;
         end);
     end;
 end;
end;

procedure TSemaForm.CreateButtonClick(Sender: TObject);
begin
 NewSemaphore('Semaphore-' + IntToStr(a));
 Inc(a);
end;

procedure TSemaForm.FormCreate(Sender: TObject);
begin
 MySemaphore := OpenSemaphore(SEMAPHORE_ALL_ACCESS, false,PWideChar('yhackup'));
 if MySemaphore = 0 then
 begin                           // 5 kişilik yer var, 5 yer de boş
   MySemaphore := CreateSemaphore(nil, 5, 5, PWideChar('yhackup'));
 end;
end;

procedure TSemaForm.NewSemaphore(Text: String);
var
 str: string;
begin
 str := Text;
 TThread.CreateAnonymousThread(
   procedure
   begin
     AddList(str, 0);
     WaitForSingleObject(MySemaphore, INFINITE);

     AddList(str, 1);
     Sleep(5000);

     ReleaseSemaphore(MySemaphore, 1, nil);
     AddList(str, 2);
   end).Start;
end;

end.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#2
Güzel bir örnek, ellerine sağlık kardeşim.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
(12-10-2018, Saat: 13:39)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Güzel bir örnek, ellerine sağlık kardeşim.

Teşekkürler abi, sayende...
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi