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.
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ı: Güzel bir örnek, ellerine sağlık kardeşim.

Teşekkürler abi, sayende...
WWW
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi