komutların çalışma sırası veya önceliği var mı ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cinarbil
Üye
Mesajlar: 109
Kayıt: 18 Mar 2014 09:26

komutların çalışma sırası veya önceliği var mı ?

Mesaj gönderen cinarbil »

Aşağıda kod kenarlarına açıkladım.
sql yedekleme programında yedekleme başlayınca bazı butonları pasif yapmak istiyorum;
delphi hakkında komutların çalışma sırası veya önceliği var mı ?
yukarıdan aşağı çalışması gerekli değil mi;

Kod: Tümünü seç

 log_memo.Lines.Add('Yedekleme Başladı                      ' + datetostr(date)+' ' + timetostr(time())) ; // sorunsuz hemen memo ya yazıyor;
 // Application.ProcessMessages; // etkisi olmuyor butonlar aynı ama sql komutuları çalışıyor yedekliyor hata yok 
 // Application.Run;  // etkisi oluyor butonlar hemen değişiyor ama sql komutuları çalışmıyor hata yok yedekleme yok
 // yedekfrm.Refresh; // butonlara etkisi yok sql komutları çalıyor yedekliyor

yedekleme bitince tuşlar istediğin gibi oluyor.

Kod: Tümünü seç

 if (hata) then begin
    log_memo.Lines.Add('Yedekleme Bitti     ' + datetostr(date)+' ' + timetostr(time())) ; ; // bu satırı memoya yazmadan tuşlar pasif oluyor

Kod: Tümünü seç

procedure Tyedekfrm.yedekleClick(Sender: TObject);
var
   Save_Cursor:TCursor;
   hata:boolean;
   yol:Ansistring;
    begin
    tus_yedekle;
    yedekfrm.Cursor := crsqlwait;
    hata:=true;
    Save_Cursor := Screen.Cursor;
    baglan.Enabled:=false; //butonlar
    liste.Enabled:=false;
    temizle.Enabled:=false;
    yardim.Enabled:=false;
    kapat.Enabled:=false;
    kaydet.Enabled:=false;
    yukle.Enabled:=false;
    zipla.Enabled:=false;
    log_memo.Lines.Add('Yedekleme Başladı                      ' + datetostr(date)+' ' + timetostr(time())) ; // sorunsuz hemen memo ya yazıyor;
    
    // Application.ProcessMessages; // etkisi olmuyor butonlar aynı ama sql komutuları çalışıyor hata yok 
    // Application.Run;  // etkisi oluyor butonlar değişiyor ama sql komutuları çalışmıyor hata yok 
    // yedekfrm.Refresh; // butonlara etkisi yok sql komutları çalıyor
        try
    sorgu.sql.Clear;
    sorgu.sql.Add('BACKUP DATABASE ' + tablo_adi.Text);
    sorgu.sql.Add('   TO DISK = '+''''+kayit_yeri1.Text+'''');
    sorgu.sql.Add('  WITH   INIT ,');
    sorgu.sql.Add('  NOUNLOAD ,');
    sorgu.sql.Add('  NAME = N'+''''+tablo_adi.Text+' backup'+''''+',');
    sorgu.sql.Add('  NOSKIP ,');
    sorgu.sql.Add('  STATS = 10,');
    sorgu.sql.Add('  NOFORMAT');
    sorgu.ExecSQL;
     except
    hata:=false;
     log_memo.Lines.Add('Yedeklemede Hata Oluştu                '+ datetostr(date)+' ' + timetostr(time())) ;
     yedekfrm.Cursor := Save_Cursor;
    tus_pasif;
    end;
    if (hata) then begin
    log_memo.Lines.Add('Yedekleme Bitti                        ' + datetostr(date)+' ' + timetostr(time())) ; ;
    yedekfrm.Cursor := Save_Cursor;
    tus_pasif;
    Application.ProcessMessages;

"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: komutların çalışma sırası veya önceliği var mı ?

Mesaj gönderen mrmarman »

Sıralama düşündüğünüz gibi.
İstisnalar thread içeren fonksiyon, procedure, class gibi paralel işlemler.
Veritabanı işlemleri genelde bağımsız thread ile yürür çünkü projenin donması istenmez.
Callback'ler ile farkındalık oluşturur.

Başarılar.
Resim
Resim ....Resim
Kullanıcı avatarı
cinarbil
Üye
Mesajlar: 109
Kayıt: 18 Mar 2014 09:26

Re: komutların çalışma sırası veya önceliği var mı ?

Mesaj gönderen cinarbil »

Bilgilendirme için teşekküre ederim. Tüm yazdığınız cevapları okuyor ve size saygı duyuyorum.
Allah sizden ve emeği geçenlerden razı olsun inşallah.

Burada ihtiyacım yok ama sizin yazdığınızdan ihtiyaç oluşması halinde
çalışması zorunlu olan ama sıralı çalışmayan komutlar için thread oluşturup kullanmam gerektiğini anladım.
doğru anladım mı ? yoksa başka yöntemleri var mıdır.
örneklemek için bir kanal oluşturarak

Kod: Tümünü seç

var
  KanalID: DWORD;
begin
  CreateThread(nil, 0, @zorunluisler1, nil, 0, KanalID);

bunu da aşağıdaki gibi kullanmalı mıyım ?

Kod: Tümünü seç

// formda tanımla
function zorunluisler1(P: Pointer): Longint; stdcall;
..
implementation
..
 

function zorunluisler1(P: Pointer): Longint; stdcall;
var
 // varssa  tanımlar
begin
// yapılması öncelikli işler  
end;
Saygılarımla;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: komutların çalışma sırası veya önceliği var mı ?

Mesaj gönderen mrmarman »

Öncelikli / thread vs. derken doğru anlaşılsın diye yinelemekte fayda görüyorum.

- Thread ile aynı projeden iki veya daha fazla adet çalışıyor gibi düşünün. Bir projenizde kayıt kısmında işlem yapıyorsunuz, diğer projenizde de raporlama kısmında işlem yapıyorsunuz diyelim. Birbirinin hızına veya çalışma iş akışına etkisi var mıdır ? yoktur. İşte thread dediğimiz unsur budur. Aynı proje içinde birbirine paralel çalışan birden fazla kanal olarak düşünün. Zaten adı da bundan geliyor.

- Projeniz bir kanallı bir programdır. Kullandığınız bileşenler sizin kanalınızda işlem sırasında donma benzeri bir sıkıntı yaratmamak için kendileri arka planda çalışacak verdiğiniz örnek gibi yeni thread(ler) oluşturabilirler.

- İşte iş akışında sıraya aykırı durumlar görürseniz biliniz ki thread içeren bir çalışma var. Bu işlem sona ermeden sizin projeniz yoluna devam eder. Tabi işlem bitmiş gibi davranamazsınız. Böyle yaparsanız hata edersiniz. Bunu bilerek akışı planlamalısınız.
Resim
Resim ....Resim
Cevapla