06-09-2017, Saat: 17:34
(Son Düzenleme: 06-09-2017, Saat: 17:43, Düzenleyen: Fesih ARSLAN.)
Tutamadım kendimi, servise binmedim 
1. uygulama:
Bu da 2. uygulama:
Şimdi gelelim açıklamalara:
Senkron ve asenkron kavramlarını hemen hepimiz biliyoruz değil mi? ( Aslında bu cümleden sonra devam etmeme gerek olmamalı
) )
API'leri bilmiyorsak hemen dökümana başvuruyoruz; kaçamazsınız...
PostMessage
SendMessage
PostMessage der ki, HWND parametresi ile verdiğin pencerenin mesaj kuyruğuna, verdiğin mesajı, verdiğin parametrelerle BIRAKIRIM, MESAJIN İŞLENİP İŞLENMEDİĞİYLE İLGİLENMEM, GERİ DÖNERİM.
SendMessage da der ki, HWND parametresi ile verdiğin pencerenin mesaj kuyruğuna, verdiğin mesajı, verdiğin parametrelerle GÖNDERİRİM VE MESAJIN İŞLENMESİNİ BEKLERİM.
Neler olduğu ve neden olduğu tamemen bu bekleme/beklememe mekanizmasının çeşitli kombinasyonları. Şöyle örneklendireyim:
Sleep(30*1000) gibi bir uyuma verdiğinizde ilgili thread bloklanacak olduğu için, varsa, o thread'in mesaj kuyruğu da işlenemeyecektir.
Bu mesaj kuyruğuna SendMessage ile gönderilen tüm mesajlar, thread bloklandığı için işlenemeyecek; gönderici tarafı da alıcıdan bir işlendi cevabı beklediği ve alamadığı için SendMessage içinde bloklanacaklardır.
Bu mesaj kuyruğuna PostMessage ile gönderilen tüm mesajlar, thread bloklandığı için işlenemeyecek FAKAT, gönderici tarafı herhangi bir işlendi cevabı beklemediği için bloklanmayacak ve çalışmasına devam edecektir.
Her iki durum için de, Sleep süresi bitip ilgili thread tekrar tarifelendiğinde alıcı taraftaki kuyruk tüketilmeye devam edilecek ve kuyruktaki mesajlar işlenecektir.
Nasıl aşılabileceğine dair bilgiyi çoktan verdim aslında
)
Abi buyur o zaman
)
--

1. uygulama:
const
WM_P2 = WM_User + 11863;
cSecond = 30;
cSleepTime = cSecond * 1000;
type
Tp1Frm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private procedure WM_P2_Message(var msg: TMessage); message WM_P2;
public
end;
procedure Tp1Frm1.WM_P2_Message(var msg: TMessage);
begin
ShowMessage('WM_P2_Message mesajı işleniyor');
// some code..
ShowMessage('WM_P2_Message mesajı işlendi');
end;
procedure Tp1Frm1.Button1Click(Sender: TObject);
begin
Sleep(cSleepTime);
end;
Bu da 2. uygulama:
const
WM_P2 = WM_User + 11863;
procedure TForm2.Button1Click(Sender: TObject);
var
p1Handle: HWND;
begin
p1Handle := FindWindow('Tp1Frm1', nil);
if p1Handle <> 0 then
if IsWindow(p1Handle) then
PostMessage(p1Handle, WM_P2, 0, 0);
//SendMessage(p1Handle, WM_P2, 0, 0);
ShowMessage('DONE');
end;
Şimdi gelelim açıklamalara:
Senkron ve asenkron kavramlarını hemen hepimiz biliyoruz değil mi? ( Aslında bu cümleden sonra devam etmeme gerek olmamalı
) )API'leri bilmiyorsak hemen dökümana başvuruyoruz; kaçamazsınız...
PostMessage
SendMessage
PostMessage der ki, HWND parametresi ile verdiğin pencerenin mesaj kuyruğuna, verdiğin mesajı, verdiğin parametrelerle BIRAKIRIM, MESAJIN İŞLENİP İŞLENMEDİĞİYLE İLGİLENMEM, GERİ DÖNERİM.
SendMessage da der ki, HWND parametresi ile verdiğin pencerenin mesaj kuyruğuna, verdiğin mesajı, verdiğin parametrelerle GÖNDERİRİM VE MESAJIN İŞLENMESİNİ BEKLERİM.
Neler olduğu ve neden olduğu tamemen bu bekleme/beklememe mekanizmasının çeşitli kombinasyonları. Şöyle örneklendireyim:
Sleep(30*1000) gibi bir uyuma verdiğinizde ilgili thread bloklanacak olduğu için, varsa, o thread'in mesaj kuyruğu da işlenemeyecektir.
Bu mesaj kuyruğuna SendMessage ile gönderilen tüm mesajlar, thread bloklandığı için işlenemeyecek; gönderici tarafı da alıcıdan bir işlendi cevabı beklediği ve alamadığı için SendMessage içinde bloklanacaklardır.
Bu mesaj kuyruğuna PostMessage ile gönderilen tüm mesajlar, thread bloklandığı için işlenemeyecek FAKAT, gönderici tarafı herhangi bir işlendi cevabı beklemediği için bloklanmayacak ve çalışmasına devam edecektir.
Her iki durum için de, Sleep süresi bitip ilgili thread tekrar tarifelendiğinde alıcı taraftaki kuyruk tüketilmeye devam edilecek ve kuyruktaki mesajlar işlenecektir.
Nasıl aşılabileceğine dair bilgiyi çoktan verdim aslında
)(06-09-2017, Saat: 17:25)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:(06-09-2017, Saat: 16:46)The_aLiEn Adlı Kullanıcıdan Alıntı: Button ne kadar büyükse proje de o kadar büyük olacak mı peki?
Tabii
Abi buyur o zaman
)--
Me on the move..

