12-10-2018, Saat: 10:20
Minik bir Semaphore örneği paylaşmak istedim.
video yeni yüklendiği için kalitesi şu an düşük görünebilir.
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.