AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread abbrechen

Ein Thema von Jacki O · begonnen am 21. Okt 2003 · letzter Beitrag vom 22. Okt 2003
Thema geschlossen
Seite 1 von 2  1 2      
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#1

Thread abbrechen

  Alt 21. Okt 2003, 09:53
Hallo,

ich komme mit meinem Problem (TBatchMove.Execute abbrechen) nicht so wirklich weiter, deshalb formuliere ich die Sache mal anders.Ich habe einen Thread am laufen, in dem Datensätze aus einer Datenbank (Remote) via ODBC ausgelesen und in eine lokale Datenbank geschrieben werden. Z.Zt. wird nach 50.000 gelesenen Datensätzen geschaut, ob eine Abbruch Bedingung (Terminated) eingetreten ist. Nun soll es aber möglich sein, den Thread zu einer beliebigen Zeit abbrechen zu können. Und das geht leider nicht, da der Thread weiterhin läuft, bis der 50.000 Datensatz erreicht wurde. TBatchMove kann man wohl nicht beenden, aber es gibt doch sicher die Möglichkeit den Thread so zu terminieren, das er beendet wird. Inkonsistente Daten sind dabei kein Problem, werden in kauf genommen.

Gruß Jacki
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Thread abbrechen

  Alt 21. Okt 2003, 16:45
warum kannst du den Thread nicht beenden? Ruf doch TThread.Terminate auf. Im Thread prüfst du denn ob Terminated True ist und brichst dann ab.

Delphi-Quellcode:
procedure TMyThread.Execute;
begin
  ...;
  while not EOF() or not Terminated do
  begin
    ...;
  end;
  ...;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#3

Re: Thread abbrechen

  Alt 21. Okt 2003, 20:38
Hallo,

genau so mache ich es ja. Ich habe eine TBatchMove Komponete im Einsatz, die mir jeweils 50.000 Datensätze von einer DB in die andere DB kopiert. Diese Aktion kann ich jedoch nicht abbrechen. Ich habe mir z.Zt so geholfen, das ich nach dem 50.000ten Datensatz Terminated überprüpfe.

Code:
while (not Terminated) do begin
 
 BatchMove1.Execute;

end;
Ich wüder jedoch lieber den Thread auf einem Schlag beenden wollen.

Gruß Jacki
 
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Thread abbrechen

  Alt 21. Okt 2003, 20:42
dann schreib im Hauptprogramm beim OnClick des Abbrechen Buttons

TerminateThread(<Handle des Threads>); der schmeisst den Thread ohne Rückfrage aus dem Speicher. Das ist eine ziemlich radikale Methode wohlgemerkt.

btw. bei <Handle des Threads> kannst du, falls du VCL Threads verwendest, über die Instanz des von TThread abgeleiteten Objektes an die Eigenschaft Handle rankommen (TThread.Handle);

mfG
mirage228
David F.
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Thread abbrechen

  Alt 21. Okt 2003, 20:46
Aber das ist wirklich die radikale Holzhammermethode. Besser ist es immer den Thread sich selbst beenden lassen. Aber so wie es aussieht kehrt dein BatchMove.Execute nicht vorher zurück. Also wirst du keine andere Chance haben.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Thread abbrechen

  Alt 22. Okt 2003, 07:50
Hallo Jacki O,

wie schon einmal vorgeschlagen, solltest du in diesem Fall das BatchMove ersetzen durch eine Schleife, in der du die Daten einzeln einfügst, die kannst du nach jedem "Post"-Befehl verlassen. Dazu benutzt du Luckies Schleife.
Albert
Live long and prosper


MrSpock
 
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#7

Re: Thread abbrechen

  Alt 22. Okt 2003, 10:27
Morgen,

ich hatte gehofft, das man den Thread einfach nur beenden kann. Ich wollte meinen Quellcode nicht neu stricken , werde das aber wohl nun doch tun.
Also vielen, vielen Dank für die Tips.

Gruß Jacki
 
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#8

Re: Thread abbrechen

  Alt 22. Okt 2003, 15:24
Hi,

ich habe nun alles umgebaut, soll heissen die BatchMove Geschichte ist raus und eine Query hinein gkommen. Nun kommt eine neue Frage auf. Das öffnen der Quelldatenbank dauert ziemlich lange. Ich lasse mir mittels SQL die Datensätze einer bestimmten Stunde anzeigen. Es gibt keine Komponenten zur Anzeige der Datensätze, es werden lediglich die Datensätze in eine lokale DB kopiert. Innerhalb einer Schleife, die bei EOF oder Terminated abbricht. Kann man da irgend etwas in Punkto Geschwindigkeit machen ? Denn so habe ich ja das gleiche Problem wie mit der BatchMove Komponente. Solange die Query mit dem connect'en beschäftigt ist (dauert ca 2 Minuten) kann ich den Thread, in der die Sache abläuft, auch nicht beenden. Irgend eine Idee ?

Dank im voraus... Jacki
 
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Thread abbrechen

  Alt 22. Okt 2003, 15:34
Zitat von Jacki O:
... Das öffnen der Quelldatenbank dauert ziemlich lange. Ich lasse mir mittels SQL die Datensätze einer bestimmten Stunde anzeigen. ...
welche DB nutzt Du und welches SQL-Statement?

Vielleicht können die DB-Profis hier ja einiges Optimieren...
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
 
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#10

Re: Thread abbrechen

  Alt 22. Okt 2003, 16:14
Hi,

Zitat:
welche DB nutzt Du und welches SQL-Statement?
ich nutze Paradox V4.0 und das SQL-Statement sieht so aus:
Code:
select * from MyBase M
where M."DATE" >= '22.10.2003 12:00:00'
and  M."DATE" < '22.10.2003 12:59:59'
<=- Jacki
 
Thema geschlossen
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz