Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
100 puan değerinde (Threading)
#31
Merhaba,

Aşağıdaki gibi bir kod istediğimiz sonuca ulaştırıyor:

procedure TForm1.Button1Click(Sender: TObject);
var
 H: THandle;
begin
 Event.ResetEvent;
 H := Event.Handle;

 TThread.CreateAnonymousThread(
  procedure
  begin
    Sleep(10000);
    Event.SetEvent;
  end
 ).Start;

 while True do
 begin
   case MsgWaitForMultipleObjects(1, H, FALSE, INFINITE, QS_ALLINPUT) of
     WAIT_OBJECT_0: Break;
     else Application.ProcessMessages;
   end;
 end;

 // Burada Event için bekleme kodunuz olacak. Ve bu kod uygulamanızı kilitlemeyecek. Progressbar'ın hareket ettiğini
 // Timer'ın ilgili zaman değerlerini label'a yazdığını gözlemlemeniz gerek.

 Memo1.Lines.Add('Bu satır ancak 10 saniye sonra işletilecek. Ancak bu arada formunuz interaktif olacak. Memoya tıklayıp yazı yazabileceksiniz. Ancak CPU kullanım oranınız da yüksek olmayacak. !');
end;

MsgWaitForMultipleObjects fonksiyonunun ne yaptığını okuduğunuz zaman bu kod basit:
- Bu fonksiyon aslında birden fazla sync edilebilen nesneyi bekliyor. Bizim örneğimizde bir tane olduğu için ilk parametremiz 1
- 2. parametre aslında HANDLE dizisi. Birden fazla nesne olduğunda işleri karıştıracak, ama tek nesne için iş kolay. Örnekteki gibi Event'in handle değerini bir değişkene alıp gönderebiliriz.
- 3. parametre bütün nesneleri bekleyip beklemeyeceğini belirliyor. Bizim örneğimiz için TRUE veya FALSE olması anlamsız.
- 4. parametre timeout. Biz thread'in bitişini bilmediğimiz için INFINITE (sonsuz) dedik. 
- Son parametre ise bu fonknsiyonun hangi Input'larda geri döneceği. Biz bütün inputlar dedik, böylece klavye, mouse, SendMessage gibi bütün input işlemleri için fonksiyon kesilecek.

Bütün inputlarda fonksiyon kesileceği için bunu while döngüsü içine aldım. Dikkat edecek olursanız Thread bitmediği sürece bu döngüden çıkamıyor.

Tuğrul Bey, umarım aradığınız çözüm budur.

Kod çalışıyor, ama bu kod programın içine gömebileceğiniz bir kod değil! Öncelikle sonsuza kadar bekleme olmaz Smile Ayrıca bu şekilde bekleme yapmak zorunda kalıyorsanız programın tasarımını bir kere daha düşünün, büyük ihtimalle bir yerde yanlış yapıyorsunuz. Son olarak, Application.ProcessMessages çok gıcık, tehlikeli, her kullandığımda kendimi kötü hissettiğim, kötü evlat gibi (artık ekleyebildiğiniz ne varsa ekleyin) bir prosedür. Programın içinde buna ihtiyaç duyuyorsanız gene program tasarımında sorun var demektir. Bütün bunları yazıyorum, ama kendi programlarımda da bu sorunları yaşıyorum. Maalesef program yazmak çok hızlı bir iş gibi düşünülüyor, oysa değil. Hızlı yazdığınız zaman da Application.ProcessMessages veya yukarıdaki gibi bekleme kodları yazmak gerekebiliyor (Ben Muharrem Bey'in yazdığına benzer kodlar yazıyordum, ama bu yenisi diğerinden daha iyi Smile ). 

İyi çalışmalar
Cevapla


Bu Konudaki Yorumlar
100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 08:26
100 puan değerinde (Threading) - Yazar: mrmarman - 30-04-2018, Saat: 09:25
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 09:43
100 puan değerinde (Threading) - Yazar: mrmarman - 30-04-2018, Saat: 09:44
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 09:45
Cvp: 100 puan değerinde (Threading) - Yazar: adelphiforumz - 30-04-2018, Saat: 10:24
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 11:09
Cvp: 100 puan değerinde (Threading) - Yazar: esistem - 30-04-2018, Saat: 11:51
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 12:03
100 puan değerinde (Threading) - Yazar: yhackup - 30-04-2018, Saat: 12:08
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 12:17
100 puan değerinde (Threading) - Yazar: esistem - 30-04-2018, Saat: 17:15
100 puan değerinde (Threading) - Yazar: narkotik - 30-04-2018, Saat: 17:32
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 17:38
100 puan değerinde (Threading) - Yazar: mrmarman - 30-04-2018, Saat: 18:32
100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 19:25
100 puan değerinde (Threading) - Yazar: mrmarman - 30-04-2018, Saat: 19:38
100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 30-04-2018, Saat: 19:57
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 19:59
100 puan değerinde (Threading) - Yazar: mrmarman - 30-04-2018, Saat: 20:16
Cvp: 100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 30-04-2018, Saat: 20:25
100 puan değerinde (Threading) - Yazar: mrmarman - 30-04-2018, Saat: 21:48
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 22:10
Cvp: 100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 30-04-2018, Saat: 23:53
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 30-04-2018, Saat: 23:54
Cvp: 100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 30-04-2018, Saat: 23:57
Cvp: 100 puan değerinde (Threading) - Yazar: canbir - 01-05-2018, Saat: 01:52
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 01-05-2018, Saat: 19:59
Cvp: 100 puan değerinde (Threading) - Yazar: Fesih ARSLAN - 01-05-2018, Saat: 20:29
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 01-05-2018, Saat: 21:03
100 puan değerinde (Threading) - Yazar: Bahadir.Alkac - 02-05-2018, Saat: 09:23
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 02-05-2018, Saat: 22:20
Cvp: 100 puan değerinde (Threading) - Yazar: Bahadir.Alkac - 02-05-2018, Saat: 23:32
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 02-05-2018, Saat: 23:50
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 03-05-2018, Saat: 14:04
Cvp: 100 puan değerinde (Threading) - Yazar: mrmarman - 02-05-2018, Saat: 23:39
100 puan değerinde (Threading) - Yazar: edo - 02-05-2018, Saat: 10:55
Cvp: 100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 03-05-2018, Saat: 17:03
Cvp: 100 puan değerinde (Threading) - Yazar: Fesih ARSLAN - 02-05-2018, Saat: 12:34
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 02-05-2018, Saat: 22:24
Cvp: 100 puan değerinde (Threading) - Yazar: adelphiforumz - 02-05-2018, Saat: 13:01
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 02-05-2018, Saat: 22:33
Cvp: 100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 03-05-2018, Saat: 01:14
Cvp: 100 puan değerinde (Threading) - Yazar: DelphiCan - 03-05-2018, Saat: 08:15
Cvp: 100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 03-05-2018, Saat: 09:31
Cvp: 100 puan değerinde (Threading) - Yazar: DelphiCan - 03-05-2018, Saat: 10:22
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 03-05-2018, Saat: 14:17
100 puan değerinde (Threading) - Yazar: esistem - 03-05-2018, Saat: 09:07
100 puan değerinde (Threading) - Yazar: canbir - 03-05-2018, Saat: 16:21
100 puan değerinde (Threading) - Yazar: esistem - 04-05-2018, Saat: 08:47
100 puan değerinde (Threading) - Yazar: canbir - 06-05-2018, Saat: 00:52
Cvp: 100 puan değerinde (Threading) - Yazar: Halil Han BADEM - 06-05-2018, Saat: 10:59
Cvp: 100 puan değerinde (Threading) - Yazar: Fesih ARSLAN - 06-05-2018, Saat: 11:10
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 07-05-2018, Saat: 08:23
100 puan değerinde (Threading) - Yazar: bibilen - 13-09-2020, Saat: 17:38
100 puan değerinde (Threading) - Yazar: 3ddark - 14-09-2020, Saat: 02:37
Cvp: 100 puan değerinde (Threading) - Yazar: SecondLife - 14-09-2020, Saat: 10:12
100 puan değerinde (Threading) - Yazar: sadettinpolat - 14-09-2020, Saat: 11:51
Cvp: 100 puan değerinde (Threading) - Yazar: sabanakman - 14-09-2020, Saat: 13:33
100 puan değerinde (Threading) - Yazar: 3ddark - 15-09-2020, Saat: 16:15
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 19-09-2020, Saat: 02:37
100 puan değerinde (Threading) - Yazar: SecondLife - 19-09-2020, Saat: 09:31
100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 19-09-2020, Saat: 17:23
100 puan değerinde (Threading) - Yazar: nguzeller - 20-09-2020, Saat: 13:09
100 puan değerinde (Threading) - Yazar: ercan_elo_bil - 23-03-2022, Saat: 14:53
Cvp: 100 puan değerinde (Threading) - Yazar: Tuğrul HELVACI - 23-03-2022, Saat: 16:46
100 puan değerinde (Threading) - Yazar: Hayati - 23-03-2022, Saat: 15:44



Konuyu Okuyanlar: 1 Ziyaretçi