Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Thread kullanmadan veya IdThreadComponent ile AniIndicator kullanımı hk.
#11
Tuğrul hocam teşekkür ederim cevaplarınız için.

Yazdıklarınız dahil her şeyi denedim, sonuç olarak işlemlerin hepsinin doğru olduğunu teyit ettim. Sadece ios tarafında bu sorunu veriyor olması da buna işaret ediyor. Eski bir ios telefon bulup onda test edeceğim eğer yine sorun düzelmezse delphi son sürümünü kurup sorun delphi'den mi anlayacağım.

Sonucu yazacağım.

İyi çalışmalar.
Cevapla
#12
(05-10-2017, Saat: 17:22)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Malum bu aralar formumuzda alternatif çözümler revaçta, bu vesile ile nesne kullanmadan, örnek bir kod paylaşımı yapayım.
TThread.CreateAnonymousThread(
 procedure ()
 begin
   TThread.Synchronize (nil,
     procedure ()
     begin
       AniIndicator1.Visible := True;
       AniIndicator1.Enabled := True;
     end
   );
   try
     //işlemleriniz;
   finally
   //  TThread.Synchronize (nil,
   //    procedure ()
   //    begin
         AniIndicator1.Enabled := False;
         AniIndicator1.Visible := False;
   //    end);
   end;
 end
).Start;

finally bölümündeki kodları opsiyonel yaptım. Smile 
Sebebi ise Android uygulamalarda AnonymousThread işlemi tamamlandıktan (örneğin, ListView dolduruluyor) hemen sonra AniIndicator'ün gizlenmesi, az da olsa zaman alıyor (1-2 sn.). Finally bölümündeki  Synchronize'ı kapatınca, thread bitimine müteakip AniIndicator gizleniyor.


Fesih Hocam;
ios tarafında kodu yazdığınız butona 3-4 defa bastığınızda sizde ekteki hatayı alıyor musunuz?


Ek Dosyalar Resimler
   
Cevapla
#13
(07-10-2017, Saat: 18:00)pro_imaj Adlı Kullanıcıdan Alıntı:
(05-10-2017, Saat: 17:22)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Malum bu aralar formumuzda alternatif çözümler revaçta, bu vesile ile nesne kullanmadan, örnek bir kod paylaşımı yapayım.
TThread.CreateAnonymousThread(
 procedure ()
 begin
   TThread.Synchronize (nil,
     procedure ()
     begin
       AniIndicator1.Visible := True;
       AniIndicator1.Enabled := True;
     end
   );
   try
     //işlemleriniz;
   finally
   //  TThread.Synchronize (nil,
   //    procedure ()
   //    begin
         AniIndicator1.Enabled := False;
         AniIndicator1.Visible := False;
   //    end);
   end;
 end
).Start;

finally bölümündeki kodları opsiyonel yaptım. Smile 
Sebebi ise Android uygulamalarda AnonymousThread işlemi tamamlandıktan (örneğin, ListView dolduruluyor) hemen sonra AniIndicator'ün gizlenmesi, az da olsa zaman alıyor (1-2 sn.). Finally bölümündeki  Synchronize'ı kapatınca, thread bitimine müteakip AniIndicator gizleniyor.


Fesih Hocam;
ios tarafında kodu yazdığınız butona 3-4 defa bastığınızda sizde ekteki hatayı alıyor musunuz?

Bu metodu bir çok işlemde kullanıyorum. Belirttiğiniz şekilde bir hata ile karşılaşmadım.
İlave kod yazdıysanız, ilgili methodu debug ile kontrol edin.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#14
Merhaba;

Konuyla ilgili sorunun kaynağını buldum, çoğu kişinin işine yarayacak bir bilgi olabilir;

Fesih hocam sizin mantığın araştırınca marco cantu'nunda aynı yöntemle kullandığını gördüm bundan dolayı bu şekilde ilerlemeye emin oldum.

Sorunla sonradan karşılacaklara direk anlaşılır olması açısından; Fesih hocamında yazdığı gibi basitçe kodun kullanımı;
  ServerCon();

 TThread.CreateAnonymousThread(
   procedure()
   begin
     TThread.Synchronize(nil,
       procedure()
       begin
         AniIndicator1.Visible := True;
         AniIndicator1.Enabled := True;
         frmAna.AniIndicator1.BringToFront;
       end);
     try
       // işlemleriniz+
   
       // işlemleriniz-
     finally
       TThread.Synchronize(nil,
         procedure()
         begin
           AniIndicator1.Enabled := False;
           AniIndicator1.Visible := False;
           frmAna.AniIndicator1.SendToBack;
         end);
     end;
   end).Start;


procedure TfrmA.ServerCon();
begin
 try
   if conServer.Connected = False then
     conServer.Connected := true;
 Except
   showmessage('Check Your Internet Connection');
   // İnternet Bağlantınızı Kontrol Edin.
   Exit;
 end;
end;



Alıntı:Project Projectl.exe raised exception class EOLEDBError .A.ith message 'OLE DB error occurred. Code 80040 1F0h. Colnitiabze has not been called.'. 

Yukarıdaki koddaki nüans server bağlantısını Connection nesnesini Thread içinde yapmamaktan geçiyor aksi durumda yukarıdaki hata ile karşılaşırsınız.

Hatayı araştırdığımda;
CoInitialize ve Execute yöntemleriyle çağırmanın gerekliliğine vurgu yapılıyor. Ben şimdilik bu kolay yöntemle işi çözmüş oldum.

Bundan dolayı Connection işlemini (ServerCon()) Thread başlamadan yapıyorum.

Teşekkürler.
Cevapla
#15
Buradaki makaleler'de işe yarayabilir.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#16
(13-10-2017, Saat: 10:23)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Buradaki makaleler'de işe yarayabilir.

Tuğrul hocam; Sorunun çözümüyle ilgili sitenizden fazlaca faydalandım Smile , ayrıca teşekkür ederim.
Cevapla
#17
(12-10-2017, Saat: 22:42)pro_imaj Adlı Kullanıcıdan Alıntı: Merhaba;

Konuyla ilgili sorunun kaynağını buldum, çoğu kişinin işine yarayacak bir bilgi olabilir;

Fesih hocam sizin mantığın araştırınca marco cantu'nunda aynı yöntemle kullandığını gördüm bundan dolayı bu şekilde ilerlemeye emin oldum.

Sorunla sonradan karşılacaklara direk anlaşılır olması açısından; Fesih hocamında yazdığı gibi basitçe kodun kullanımı;
  ServerCon();

 TThread.CreateAnonymousThread(
   procedure()
   begin
     TThread.Synchronize(nil,
       procedure()
       begin
         AniIndicator1.Visible := True;
         AniIndicator1.Enabled := True;
         frmAna.AniIndicator1.BringToFront;
       end);
     try
       // işlemleriniz+
   
       // işlemleriniz-
     finally
       TThread.Synchronize(nil,
         procedure()
         begin
           AniIndicator1.Enabled := False;
           AniIndicator1.Visible := False;
           frmAna.AniIndicator1.SendToBack;
         end);
     end;
   end).Start;


procedure TfrmA.ServerCon();
begin
 try
   if conServer.Connected = False then
     conServer.Connected := true;
 Except
   showmessage('Check Your Internet Connection');
   // İnternet Bağlantınızı Kontrol Edin.
   Exit;
 end;
end;



Alıntı:Project Projectl.exe raised exception class EOLEDBError .A.ith message 'OLE DB error occurred. Code 80040 1F0h. Colnitiabze has not been called.'. 

Yukarıdaki koddaki nüans server bağlantısını Connection nesnesini Thread içinde yapmamaktan geçiyor aksi durumda yukarıdaki hata ile karşılaşırsınız.

Hatayı araştırdığımda;
CoInitialize ve Execute yöntemleriyle çağırmanın gerekliliğine vurgu yapılıyor. Ben şimdilik bu kolay yöntemle işi çözmüş oldum.

Bundan dolayı Connection işlemini (ServerCon()) Thread başlamadan yapıyorum.

Teşekkürler.

Thread içerisinde yukarıdaki // işlemleriniz+ kod bloğundaki alanda Query'ye parametre gönderip Active yapıyorum fakat bu esnada AniIndicator1 nesnesi donuyor bu sorunu nasıl çözebilirim.

Teşekkürler.
Cevapla
#18
Information 
Merhaba,

Konu ile ilgili bazı tecrübelerimi aktarmak isterim. Özellikle veritabansal işlemler yapacaksanız ve multithread yöntem tercih ettiyseniz connection nesnenizi muhakkak thread içerisinde create edin. Queryleriniz ise Create ettiğiniz bu connection üzerinden sağlansın. Kısacası mümkün mertebe backgroundda yapacağınız işlemler kendi içerisinde çözülmeli. Formdaki nesneler ile bağlantısı azaltılmalı. Querylerinizi ve connection nesnenizi thread içerisinde create edip kullanmanız gelecekte daha karmaşık aşamalarda değişik problemler almanızın önüne geçecektir.

Saygılarımla

Ek olarak TAniIndicator componentinin bazı sıkıntılarından dolayı FGX componenti kullanıyorum. ProgressDialog ve ActivityDialog componentleri mükemmel iş görüyor. Açık kaynak kodlu componentin adresi aşağıdadır. Örnek projeleri inceleyip test edebilirsiniz.

https://github.com/ms301/FGX-FireMonkey

post-1-0-71694200-1397661481_thumb.png

post-1-0-09507800-1397663242_thumb.png
post-1-0-28248200-1397663242.png
post-1-0-67382700-1397663663_thumb.png
Cevapla
#19
Bilgilendirme için herkese çok teşekkürler , Çok güzel bir bilgilendirme olmuş Thread ile ilgili.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  fmx gönder veya enter tuşu kullanımı seydigozegir@gmail.com 5 516 24-04-2020, Saat: 11:53
Son Yorum: cihankoca
  Thread içerinde for ve sleep işleminde uygulama kırılmasını önleme pro_imaj 10 847 06-04-2020, Saat: 00:04
Son Yorum: theSinan
  İç içe VertScrollBox ve FlowLayout kullanımı ekank 12 917 02-04-2020, Saat: 01:18
Son Yorum: Fesih ARSLAN
  Çözüldü - edit veya başka nesneye focus olmuyor cinarbil 2 341 11-03-2020, Saat: 08:24
Son Yorum: cinarbil
  OrangeUI Grid kullanımı hk. pro_imaj 12 1.614 31-01-2020, Saat: 09:58
Son Yorum: pro_imaj



Konuyu Okuyanlar: 1 Ziyaretçi