Web sitesi çalışıyormu...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Web sitesi çalışıyormu...
Merhabalar..
Arkadaşlarımla birlikte birkaç web sitesi kurduk ve sürekli güncelliyoruz. Fakat bazen sitelerden herhangi biri çalışmıyor. Bu durumda ufak bir müdahale ile düzeltiyoruz. Ama bazı durumlarda sitenin çalışmadığından saatlerce haberimiz olmuyor. Bu duruma bir çare için küçük bir program yazmak istiyorum. Program, örneğin 10 dakikada bir siteleri kontrol edecek,bağlanılamayan siteleri bize haber edecek. İşte sorun burda : Bir siteye bağlanıp-bağlanamadığımı nasıl anlarım? Webbrowser'a linki yazıp bağlan dediğimizde, sorun çıktığı anda "sayfa görüntülenemiyor" başlıklı default sayfa geldiğini hepimiz biliyoruz. Acaba bu sayfanın gelip-gelmediğini mi kotrol etmem gerekiyor? Bir Fikri olan arkadaş varsa çok sevinirim..Bu arada ping çekme yöntemi çalışmaz, çünkü aynı serverda birkaç site çalışıyor,sitenin bir tanesi pasifken diğerleri çalışıyor olabiliyor...
Teşekkürler..
Arkadaşlarımla birlikte birkaç web sitesi kurduk ve sürekli güncelliyoruz. Fakat bazen sitelerden herhangi biri çalışmıyor. Bu durumda ufak bir müdahale ile düzeltiyoruz. Ama bazı durumlarda sitenin çalışmadığından saatlerce haberimiz olmuyor. Bu duruma bir çare için küçük bir program yazmak istiyorum. Program, örneğin 10 dakikada bir siteleri kontrol edecek,bağlanılamayan siteleri bize haber edecek. İşte sorun burda : Bir siteye bağlanıp-bağlanamadığımı nasıl anlarım? Webbrowser'a linki yazıp bağlan dediğimizde, sorun çıktığı anda "sayfa görüntülenemiyor" başlıklı default sayfa geldiğini hepimiz biliyoruz. Acaba bu sayfanın gelip-gelmediğini mi kotrol etmem gerekiyor? Bir Fikri olan arkadaş varsa çok sevinirim..Bu arada ping çekme yöntemi çalışmaz, çünkü aynı serverda birkaç site çalışıyor,sitenin bir tanesi pasifken diğerleri çalışıyor olabiliyor...
Teşekkürler..
Merhaba,
Uses kısmına WinInet i eklemeyi unutma.
Kullanım şekli örnek
Kolay Gelsin...
Uses kısmına WinInet i eklemeyi unutma.
Kod: Tümünü seç
Function CheckUrl(url:string):boolean;
var
hSession, hfile, hRequest: hInternet;
dwindex,dwcodelen :dword;
dwcode:array[1..20] of char;
res : pchar;
begin
if pos('http://',lowercase(url))=0 then
url := 'http://'+url;
Result := false;
hSession := InternetOpen('InetURL:/1.0',
INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
if assigned(hsession) then
begin
hfile := InternetOpenUrl(
hsession,
pchar(url),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
dwIndex := 0;
dwCodeLen := 10;
HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE,
@dwcode, dwcodeLen, dwIndex);
res := pchar(@dwcode);
result:= (res ='200') or (res ='302');
if assigned(hfile) then
InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
Var
Durum:Boolean;
begin
Durum := CheckUrl('www.yahoo.com');
if Durum = True Then
ShowMessage('Açık')
Else
ShowMessage('Kapalı')
end;
En son husonet tarafından 03 Eyl 2004 04:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Teşekkürler
Merhaba, CheckUrl fonksiyonu işime yaradı. Gönderen arkadaşa teşekkür ediyorum.
Selamlar,
@husonet
Verdiğiniz checkurl kodunu denedim çok güzel çalışıyor ama butona bastığımda form bir süre donuyor ve webden veriyi aldıktan sonra açık yada kapalı diyor. Mesela biz bununla arka arkaya 3-4 site kontrol ettirsek ve bir memoya açık kapalı yazdırsak... ozaman program kilitlenir gibi olacak.. Bunu engellemek için ne yapabiliriz?
Sanırım çözüm thread, eğer öyleyse nasıl yapılır örnek vermeniz mümkün mü? thread olayına yabancıyım.
Saygılar.
@husonet
Verdiğiniz checkurl kodunu denedim çok güzel çalışıyor ama butona bastığımda form bir süre donuyor ve webden veriyi aldıktan sonra açık yada kapalı diyor. Mesela biz bununla arka arkaya 3-4 site kontrol ettirsek ve bir memoya açık kapalı yazdırsak... ozaman program kilitlenir gibi olacak.. Bunu engellemek için ne yapabiliriz?
Sanırım çözüm thread, eğer öyleyse nasıl yapılır örnek vermeniz mümkün mü? thread olayına yabancıyım.
Saygılar.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
@sadettinpolat,
Yazılanlar bana çok karışık geldi, senkronize etsekmi etmesek mi ne yapsak belli değil
thread içinde elde ettiğim değeri uygulamama neyle nasıl göndereyimde hata oluşmasın... hiç anlamadım. Yok mu bu acemiye yardım edecek?
Bana gerekli olan, checkurl fonksiyonunu, formu dondurmadan birkaç site kontrol edebilmesi.
Yazılanlar bana çok karışık geldi, senkronize etsekmi etmesek mi ne yapsak belli değil

Bana gerekli olan, checkurl fonksiyonunu, formu dondurmadan birkaç site kontrol edebilmesi.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
@tesla, verdigim linkteki yazilari sabirla okumamissin. o yuzden karisik gelmis sana. ben mesaji 12:08 de atmisim. sen benim mesaji ne zaman gordunde ne zaman o makaleleri okudunda ne zaman bu cevabi yazdin ? 1:25
ben o makalelerin her bir sayfasina 1 saatten cok zaman ayirdim iyice anlayabilmek icin, sen 1 saatte yuzeysel okuyup gecersen karisik gelir tabi.
ben o makalelerin her bir sayfasina 1 saatten cok zaman ayirdim iyice anlayabilmek icin, sen 1 saatte yuzeysel okuyup gecersen karisik gelir tabi.
fatih tolga ve Sadettin emeğinize sağlık
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
ikutluay yazdı:fatih tolga ve Sadettin emeğinize sağlık
http://tr.delphiblog.net/2006/07/25/ned ... igimiz.htm
adresindeki yazi bana ait degildir. Tugrul Helvaci adli arkadasimiza aittir.
@sadettinpolat,
Bu akşam tekrar okuyacağım, aslında anlamadığım şey, senkronize meselesini kullanmalı mıyım ve ana formuma thread dan gelen karşıdaki web adresinin açık olup olmama bilgisini nasıl ileteceğim.
Burada bir örnek gördüm
Akşama bir deneme kodu yazmaya çalışacağım. Takıldığım yerde yine başınızı ağrıtırım izin verirseniz.
Bu akşam tekrar okuyacağım, aslında anlamadığım şey, senkronize meselesini kullanmalı mıyım ve ana formuma thread dan gelen karşıdaki web adresinin açık olup olmama bilgisini nasıl ileteceğim.
Burada bir örnek gördüm
Akşama bir deneme kodu yazmaya çalışacağım. Takıldığım yerde yine başınızı ağrıtırım izin verirseniz.
Selam, bir deneme yaptım, threadın başlayıp bittiğini delphiden görebiliyorum ama execute kısmına yazdığım şeyi yapmadı. Ana formdaki memo ya yazı yazmasını istiyorum checkurl den önce. senkronize kullanmadım.
threaddeneme.rar - 0.17MB
Bir önceki mesajımdaki linkteki kodu kendime uyarlamaya çalıştım.
Thread:
Ana form:
threaddeneme.rar - 0.17MB
Bir önceki mesajımdaki linkteki kodu kendime uyarlamaya çalıştım.
Thread:
Kod: Tümünü seç
unit MyThread;
interface
uses
Classes, ExtCtrls, Wininet, windows, strutils;
type
thrMyThread = class(TThread)
private
{ Private declarations }
thrurl, thrhtm: string;
// thrImg: Timage;
protected
procedure Execute; override;
// procedure ImajYukle;
public
constructor create(url, htm:string);
destructor Destroy; override;
end;
implementation
uses SysUtils, sxHFetch;
{ thrMyThread }
constructor thrMyThread.create(url, htm: string);
begin
inherited create(True);
FreeOnTerminate := True;
thrurl := url;
thrhtm := htm;
Priority := tpLowest;
resume;
end;
destructor thrMyThread.Destroy;
begin
inherited;
end;
procedure thrMyThread.Execute;
begin
try
thrhtm:='deneme 123';
// Synchronize(ImajYukle);
except
// Event handler konulabilir. Misal Synchronize(DoException);
end;
end;
{
procedure thrMyThread.ImajYukle;
begin
thrImg.Picture.LoadFromFile(thrldosya);
DeleteFile(thrldosya);
end;
}
end.
Kod: Tümünü seç
unit sxHFetch;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label3: TLabel;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
sss:string;
implementation
uses MyThread;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if (edit1.Text='') then
begin
showmessage('cizmedinki kesesin!!!');
exit;
end;
Memo1.Clear;
sss:='';
thrMyThread.Create(Edit1.Text, Memo1.Lines.Text);
// Memo1.Lines.Text:=sss; // boyle olmuyor
end;
end.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
ana formdaki memoya yazi yazmasini istiyorsan ana formadaki memoyu parametre olarak thread nesnesine gecmen lazim.
Threadin Create olayini soyle yap.
Synchronize kullanmadan ana formdaki memoya bu sekilde ulasabilirsin.
Threadin Create olayini soyle yap.
Kod: Tümünü seç
thrMyThread = class(TThread)
private
FMemo:TMemo; // dikkat !!
{ Private declarations }
thrurl, thrhtm: string;
protected
procedure Execute; override;
public
constructor create(url: string; aMemo: TMemo); //dikkat !!
destructor Destroy; override;
end;
constructor thrMyThread.create(url:string; aMemo: TMemo);
begin
inherited create(True);
FreeOnTerminate := True;
thrurl := url;
Priority := tpLowest;
fMemo:=aMemo; //dikkat !!
resume;
end;
procedure thrMyThread.Execute;
begin
try
FMemo.Lines.Add('thread basliyor....'); //ana formdaki memoya ekler
except
end;
end;
//ana formdan cagirirken
thrMyThread.Create(Edit1.Text, Memo1);
Synchronize kullanmadan ana formdaki memoya bu sekilde ulasabilirsin.
sadettinpolat hocam çok teşekkürler, denedim çalışıyor.
Son bir soru: eğer memo değilde ana formdaki bir string değişkenine yazmak istesem? Onu nasıl yaparım? Aynı şekilde string tanımlayıp çağırırken değişkeni yazarak denedim olmadı.
Çoklu thread kullanan uygulamalarda veri transferini nasıl yapıyorlar? Bir tür stack mı kullanılıyor?
Eğer bunuda açıklarsanız konuyu iyice anlamış olacağım.
Son bir soru: eğer memo değilde ana formdaki bir string değişkenine yazmak istesem? Onu nasıl yaparım? Aynı şekilde string tanımlayıp çağırırken değişkeni yazarak denedim olmadı.
Çoklu thread kullanan uygulamalarda veri transferini nasıl yapıyorlar? Bir tür stack mı kullanılıyor?
Eğer bunuda açıklarsanız konuyu iyice anlamış olacağım.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
http://www.diyezon.com/?p=61&page=2
thread nesnesi icinden formdaki degiskenlere , bilesenlere nasil ulasabilecegin yaziyor burda aslinda.
form1 deki stringe Synchronize metodunu kullanarak ulasabilir, degerlerini thread icinden degistirebilirsin.
thread nesnesi icinden formdaki degiskenlere , bilesenlere nasil ulasabilecegin yaziyor burda aslinda.
form1 deki stringe Synchronize metodunu kullanarak ulasabilir, degerlerini thread icinden degistirebilirsin.
Kod: Tümünü seç
thrMyThread = class(TThread)
private
FmyString:String;
protected
procedure Execute; override;
procedure StringiGuncelle;
public
end;
procedure thrMyThread.Execute;
begin
try
FmyString := 'Thread Calisiyor...';//stringe degeri burda atiyoruz
Synchronize(StringiGuncelle);
except
// Event handler konulabilir. Misal Synchronize(DoException);
end;
end;
procedure thrMyThread.StringiGuncelle;
begin
form1.myString := fmyString; //yukarida atadigmiz degeri form1 deki stringe atiyoruz.
end;
// form1 de
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label3: TLabel;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
myString:String; //stringi burda tanimliyoruz...
{ Public declarations }
end;