Basit bir thread yaptım.
Kod: Tümünü seç
unit Unit1;
.
.
private
{ Private declarations }
public
{ Public declarations }
end;
Taktarimthread = class (TThread)
protected
Procedure Execute ; override;
end;
.
.
// threadı çalıştıracak alan. Button tıklayınca thread alanına gidiyor ve çalıştırıyor.
procedure TForm1.Button258Click(Sender: TObject);
var
NewThread: Taktarimthread;
begin
NewThread:=Taktarimthread.Create(False);
end;
// Thread İşlemi Belge var ise hangi belge ise ilgili alana gidip o belgeden bilgi alıyor. Kasa belgesi ise firma, ticari belge ticari kart gibi
// ağdan gelen belgeleri kontrol edip tasnifliyor.
// Şu anda button tıklayarak test ediyorum bittiğin threadtimer ile 3 - 5 sn bir kontrol ettirmeyi planlıyorum hata vermez ise :)
procedure Taktarimthread.execute;
begin
FreeOnTerminate:=True;
if (Form1.DonguLocalQuery6.RecordCount > 0) then
begin
case Form1.DonguLocalQuery6.FieldByName('grup').AsInteger of
1 : Form1.firma;
2 : Form1.ticarikart;
3 : Form1.stok;
4 : Form1.banka;
end;
1. thread yapısı düzgün mü acaba.
2. Gönderdiğim alanlar için ayrıca thread yazmalımıyım. Form1.Firma için ayrı Form1.ticarikart için ayrı threadlar. Gönderdiğim alandaki işlemlerde threada dahil olurmu.
3. Arada bir hata veriyor. RestoreDC Fails hatası. durduruğumda aşağıdaki alana gidiyor. Cxgrid olduğu alanı kapatınca boş sayfada thread çalıştırınca hata vermiyor. CXgridtableview ile ilgili bir grafik hatası oluşuyor thread sonra ama neden bilmiyorum. Bir yerde çakışıyor mu acaba.
Kod: Tümünü seç
Unit CxGraphics;
.
.
procedure TcxCanvas.RestoreDC;
begin
dxTestCheck(Length(FSavedDCs) > 0, 'RestoreDC fails');
if Length(FSavedDCs) > 0 then
begin
Canvas.Handle := FSavedDCs[High(FSavedDCs)].Handle;
dxTestCheck(Windows.RestoreDC(Handle, FSavedDCs[High(FSavedDCs)].State), 'RestoreDC fails');
SetLength(FSavedDCs, Length(FSavedDCs) - 1);
Canvas.Unlock;
end;
end;