durdur butonu oluşturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
seci20

durdur butonu oluşturma

Mesaj gönderen seci20 »

ustalarım kolay gelsin. Nette bir çok araştırmasını yaptım ama malasef çözüme ulaşamadım daha doğrusu ulaştığım çözüm aşırı kod kalabalığına sebebiyet veriyor. Programıma durdur butonu yapmak istiyorum amacım o anki işlemi durdurmak (while vb. gibi) bunlara tek tek kod eklemek yerine durdurmanın başka bir yöntemi varmıdır.Programımda çok fazla kod olduğu için neredeyse yarısı durdur üzerine çok fazla kod kalabalığı oluyor malasef farklı bir çözüm önerisi olan varmı yada bir yolu varmı ?
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: durdur butonu oluşturma

Mesaj gönderen freeman35 »

Global bir değişken kullan, boolean mesela, işlem bloklarında buna göre kurgula.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Re: durdur butonu oluşturma

Mesaj gönderen true_false »

Yazdığın her bir satır kod bir işlemin parçasıdır ve sen bir önceki işlem tamamlanmadan bir sonraki işleme geçemezsin. (eğer bütün işi main threade yaptırıyorsan). Bu konudaki çözümün thread kullanmandır. thread konusu programlama ve kurgunun güzel konusudur. Thread kabaca işlem parçacığı demektir. Siz uzun sürecek,matematiksel işlem yapacak veya yukarıda bahsettiğiniz gibi sonlandırma ihtiyacı duyduğunuz her işlem için thread kullanabilirsiniz. Thread araştırılması kafa yorulması gereken bir konudur, kaş yapayım derken göz çıkarmayın.
iyi çalışmalar.
type
Tform1 = class(Tform)
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: durdur butonu oluşturma

Mesaj gönderen ertank »

seci20 yazdı: 30 Eki 2017 01:40 ustalarım kolay gelsin. Nette bir çok araştırmasını yaptım ama malasef çözüme ulaşamadım daha doğrusu ulaştığım çözüm aşırı kod kalabalığına sebebiyet veriyor. Programıma durdur butonu yapmak istiyorum amacım o anki işlemi durdurmak (while vb. gibi) bunlara tek tek kod eklemek yerine durdurmanın başka bir yöntemi varmıdır.Programımda çok fazla kod olduğu için neredeyse yarısı durdur üzerine çok fazla kod kalabalığı oluyor malasef farklı bir çözüm önerisi olan varmı yada bir yolu varmı ?
Merhaba, ne tür bir kod durdurmak istediğinize dair örnek(ler) paylaşmanız mümkün mü? Neden böyle birşey yapmak istediğinizi paylaşmanız mümkün mü?
seci20

Re: durdur butonu oluşturma

Mesaj gönderen seci20 »

true_false yazdı: 30 Eki 2017 05:47 Yazdığın her bir satır kod bir işlemin parçasıdır ve sen bir önceki işlem tamamlanmadan bir sonraki işleme geçemezsin. (eğer bütün işi main threade yaptırıyorsan). Bu konudaki çözümün thread kullanmandır. thread konusu programlama ve kurgunun güzel konusudur. Thread kabaca işlem parçacığı demektir. Siz uzun sürecek,matematiksel işlem yapacak veya yukarıda bahsettiğiniz gibi sonlandırma ihtiyacı duyduğunuz her işlem için thread kullanabilirsiniz. Thread araştırılması kafa yorulması gereken bir konudur, kaş yapayım derken göz çıkarmayın.
iyi çalışmalar.
hocam cevap verdiğiniz için çok teşekkür ederim öncelikle. Bu konu üzerine yoğunlaşacağım dediğiniz gibi.
seci20

Re: durdur butonu oluşturma

Mesaj gönderen seci20 »

ertank yazdı: 30 Eki 2017 05:55
seci20 yazdı: 30 Eki 2017 01:40 ustalarım kolay gelsin. Nette bir çok araştırmasını yaptım ama malasef çözüme ulaşamadım daha doğrusu ulaştığım çözüm aşırı kod kalabalığına sebebiyet veriyor. Programıma durdur butonu yapmak istiyorum amacım o anki işlemi durdurmak (while vb. gibi) bunlara tek tek kod eklemek yerine durdurmanın başka bir yöntemi varmıdır.Programımda çok fazla kod olduğu için neredeyse yarısı durdur üzerine çok fazla kod kalabalığı oluyor malasef farklı bir çözüm önerisi olan varmı yada bir yolu varmı ?
Merhaba, ne tür bir kod durdurmak istediğinize dair örnek(ler) paylaşmanız mümkün mü? Neden böyle birşey yapmak istediğinizi paylaşmanız mümkün mü?
hocam dosya okumadan tutun comport lara kadar hepsi.Tona kod var foksiyon ve prosedürler var. Amacım olurda bir yanlış işlem yapıldığında müşterinin bunun durdurmasıdır. Telefon üzerine olduğu için çok fazla hatalı işlem yapılabiliyor.
seci20

Re: durdur butonu oluşturma

Mesaj gönderen seci20 »

freeman35 yazdı: 30 Eki 2017 11:18 Global bir değişken kullan, boolean mesela, işlem bloklarında buna göre kurgula.
hocam her işlemde tek tek yazmak zorunda oluyorum ama hocamın dediği gibi thread kullanabilirsem çözüm olacabilir belki.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: durdur butonu oluşturma

Mesaj gönderen freeman35 »

İşlemler uzun sürüyorsa, dosya okurken geçen süre, comm port tan cevap beklerken geçen süre, evet thread mutlaka kullan. Biraz düşün, hatta bunu mesajı okuyan herkese anlatıyorum, program pc ile konuşma dilidir, pc sadece toplama ve kıyaslama bilir, yani makinadır, her şeyi en ince ayrıntısına kadar senin söylemen gerekir. Bu bilgi ile düşün, kullanıcı iptal edecek, nasıl? butona basacak, e sonra ne olacak? dosyayı okurken duracak yada comm portu okurken duracak!! nasıl ? if ... then break; yada exit; özetle kod yazmazdan işlem yaptırmak istiyorsan ki bu imkansızın karesi hatta kübüdür :) ha şu olabilir, kodları birleştirebilirsin, aynı procedure ü 2-3 işlem için kullanmak gibi, bu sayede kod yazma işi azalır, ama komutu iptal edemezsin. komut çalışsın ama komut olmasın? sence mümkün mü?
Thread dede aynı şey, şu avantaşın olur, uzun işlemde kullanıcı button a tıklayamaz sistem kasılır, ama thread de tıklayabilir. Ama sen gene o thread içine if ... then break; buna benzer kodu yazmak zorundasın.
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: durdur butonu oluşturma

Mesaj gönderen ertank »

Thread kullanımını öğrenme süreci uzun olabiliyor. Delphi son sürümlerinde işi pratikleştirmek için TTask sınıfını çıkardı. İlgili kaynaklardan incelenmesinde fayda var.

Kısaca pratik bir şekilde Thread kullanmış oluyorsunuz. Yani Thread için geçerli olan temel kural "grafik bileşenini değiştiremezsin" TTask içinde geçerlidir. Bu kural Microsoft işletim sisteminin bir kuralıdır. Delphi ile ilgili değildir. C#.Net için de aynı kural geçerlidir.

Mantığını anlamak adına aşağıdaki örnek verilebilir:

Kod: Tümünü seç

uses
  System.Threading;

procedure TForm1.ZamanAlanIslem();
begin
  Sleep(20000);  // Bu komut normalde uygulamayı 20 saniye dondurur. Ancak Thread içinde olduğu için donma meydana gelmeyecek
  ShowMessage('Zaman alan işlem bitti.');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Task: ITask;
begin
  Task := TTask.Create(ZamanAlanIslem);
  Task.Start();
  
  // Bu noktada ZamanAlanIslem prosedürü Thread içinde çalışmaya başlar.
  ShowMessage('Zaman alan işlem çalışmaya başladı.');
end;
Cevapla