22-11-2019, Saat: 08:39
(21-11-2019, Saat: 18:22)BGNew Adlı Kullanıcıdan Alıntı: @Tuğrul HELVACI Thread ilgili kişisel yazınızı defalarca okudum.
Hatta paylaşmış olduğunuz örnek kod üzerinden kodlarımda değişiklik yapıyorum.
Fakat aşağıdaki resimdeki hatayı alıyorum. dediğiniz gibi (gerçekten anlamadığın hususları sor, yardımcı olmaya gayret edelim.) yardımlarınızı bekliyorum.
Örnek kodunuz:
procedure TMyThread.Execute; begin inherited; try CoInitialize(nil); try // Database'e bağlan birşeyler yap.. // yada başka bir COM nesnesi ile çalış. finally end; except on E: Exception do begin end; end;
Kendi kodlarım:
procedure TwendenAl.Execute; var FDQ: TFDQuery; XMLNode: IXMLNode; sTitle, sLink: WideString; AjansUrl, AjansName: WideString; begin inherited; try CoInitialize(Nil); FDQ := TFDQuery.Create(Nil); Form1.FDGUIxWaitCursor.ScreenCursor := gcrNone; try FDQ.Connection := Form1.FDConnection; // databaseden xml aldık FDQ.Active := False; FDQ.Close; FDQ.SQL.Clear; FDQ.SQL.Add('Select * From XML'); FDQ.Prepared := True; FDQ.Open; while Not FDQ.Eof do begin AjansUrl := FDQ.FieldByName('URL').AsString; AjansName := FDQ.FieldByName('AJANS').AsString; if IsValidURL(Nil, PWideChar(AjansUrl), 0) <> S_FALSE then // Web sayfası kontrol begin Form1.XMLDocument.Active := False; Form1.XMLDocument.LoadFromFile(AjansUrl); Form1.XMLDocument.Active := True; XMLNode := Form1.XMLDocument.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item'); FDQ.Next; while XMLNode <> Nil do begin sTitle := Copy(XMLNode.ChildNodes['title'].Text, 1, 255); sLink := Copy(XMLNode.ChildNodes['link'].Text, 1, 255); XMLNode := XMLNode.NextSibling; end; end; end; finally Form1.XMLDocument.Active := False; Form1.FDGUIxWaitCursor.ScreenCursor := gcrNone; FDQ.Free; CoUnInitialize; end; except on E: Exception do begin end; end; end;
Merhaba, öncelikle belirteyim; benim thread'ler ile ilgili sadece bir tane makalem yok. Epeyce var. Ayrıca, gerek bu sitede gerek diğer kardeş sitemizde bu hususlarda yazılan onlarca cevap var. Elbette araştırmak isteyen için her şey ortada.
Buyrun bir de bu makaleleri okuyun.
Gelgelelim paylaştığınız hata mesajına. O bir AV hatası ve çok genel bir hata. Ayrıca hangi kod satırında ne yaparken oluştuğuna dair bir şey de belirtmemişsiniz. Benim; "anlamadığın hususları sor yardımcı olalım" sözümü oldukça yanlış anlamışsınız. Sadece öğrenmek isteyene sonuna kadar kapımız açık.
Multi Threaded programlama; bir thread create edeyim, içine kod yazayım ondan sonra da çalıştırayım değildir.! İşin en önemli ve en zor kısmı senkronizasyondur. Sen de güzel kardeşim, bu hususlara hiç dikkat etmemişsin kodunda. Örneğin kodunda, Form1 üzerindeki bir connection nesnesini thread içinden kullanıyorsun. O halde bir soru sorayım sana: "Bir t zamanında; ya thread içindeki kod o connection üzerinden select sorgusu çalıştırmak isterken; ana formun üzerinden yine aynı connection üzerinden bir şeyler insert etmeye çalışırsan ne olur ?"
Tüm bu kelamlar, öğrenmek isteyenler için; maksat eleştirmek değil elbette.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...


