![]() |
Threads
hallo,
bitte entschuldigt erstmal, das ich hier so viel Code poste, bin aber grad ein wenig verwirrt und hoffe so Licht ins Dunkel zu bringen. Also ich hatte folgenden Code:
Code:
Wobei showmovie dieser Code ist:
procedure Tfmain.LaptoptoPC;
begin showmovie(true); // mache hier eine synchronisation von mehreren Datenbanken showmovie(false); end;
Code:
Alles was dieser Code macht ist, dass waehrend die Synchronisation laeuft, ein Film gezeigt wird, der Film ist das fliegende Paier zwischen 2 Ordnern.
begin
if show= true then begin for i:= 0 to fmain.ControlCount-1 do fmain.Controls[i].Visible:= false; with fmain.Animate do begin visible:= true; active:= true; end; end ; else begin for i:= 0 to fmain.controlCount-1 do fmain.Controls[i].Visible:= true; with fmain.Animate do begin visible:= false; active:= false; end; end; end; Natuerlich lief der Film nicht richtig fluessig und auch ein Application.processmessages hat mich nicht weitergebracht. Deswegen will ich es nun mit einem Thread loesen und hoffe so, mein problem zu loesen. Bin leider totaler Newbie und habe nun mal folgenden Code, der aber leider nicht funktioniert, es kommt zwar keine Fehlermeldung, aber es wird auch nichts gemacht. braeuchte jetzt ein paar Hilfen, was ich falsch mache, was ich beachten muss usw. Habe jetzt mal folgenden Code:
Code:
Und hier der code der Thread-Unit:
begin
th:= showmovie_thread.Create(true); // datenbanksynchonisation th.Terminate; end;
Code:
wie ihr seht habe ich es auch nicht hinbekommen, die alte showmovie prozedur so zu uebernehmen(mit true/false), da ich die Variable nicht uebergeben konnte,falls da auch noch jemand eine Idee hat waere das spitze.
unit thread;
interface uses Classes,umain; type showmovie_thread = class(TThread) private { Private-Deklarationen } protected procedure Execute; override; procedure showmovie; end; implementation procedure showmovie_thread.Execute; begin Synchronize(showmovie); end; procedure showmovie_thread.showmovie; var i: integer; begin //if show= true then begin for i:= 0 to fmain.ControlCount-1 do fmain.Controls[i].Visible:= false; with fmain.Animate do begin visible:= true; active:= true; end; //end ; { else begin for i:= 0 to fmain.controlCount-1 do fmain.Controls[i].Visible:= true; with fmain.Animate do begin visible:= false; active:= false; end; end;} end; end. Vielen, vielen Dank fuer eure Hilfe lkz633 PS: Ich verlange wirklich keinen fertigen Code und habe selbstverstaendlich auch die Suche/OH benutzt, bitte verdammt mich nicht |
Re: Threads
Also, entweder du nimmst eine globale Variable oder definierst eine Property in deiner Threadklasse, oder du benutzt echte Threads.
Bei echten Threads hast du die Option an die Threadfunktion einen Pointer zu übergeben, der auf die Daten zeigt. Wenn ich was falsch verstanden habe, dann melde dich nochmal :) Übrigens, wenn die Synchronisation mit CopyFile oder ähnlichem vor sich geht, könntest du APCs (Asynchronous Procedure Calls) benutzen um die "Arbeit" ans System zu delegieren. |
Re: Threads
Zitat:
Dank und Gruss lkz633 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz