AGB  ·  Datenschutz  ·  Impressum  







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

SHFileoperatio-Ärger

Ein Thema von Mattze · begonnen am 23. Jul 2013 · letzter Beitrag vom 1. Aug 2013
Antwort Antwort
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#1

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 08:44
Selber Kopieroperation als getrennten Thread abspalten?
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#2

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 08:58
Hallo,

tschja, ganz so einfach ist das nicht wegen der "CopyThreadVerwaltung". Es können ja sehr viele sein...
Ich versuche mir gerade so was zu basteln.
Einen "CopyThread und "ThreadCopyManager", in dem sich jeder "CopyThread" mit seinem Handle verewigt - solange er aktiv ist.
Warum? Nur erst mal ein Problem: Wenn das Hauptprogramm geschlossen werden soll und noch kopiert wird, soll das natürlich nicht einfach abgebrochen werden.
Aber ich bin mir sicher, dass da noch weitere Probleme lauern...

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.935 Beiträge
 
Delphi 12 Athens
 
#3

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 09:46
Dieser "Kopiermanager" könnte dann auch gleich dafür sorgen, dass nicht mehrere Kopiervorgänge parallel laufen, sondern dass diese nacheinander abgearbeitet werden um das ganze zu beschleunigen. Dann reicht da auch ein Thread, der immer mit den Vorgängen gefüttert wird.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#4

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 10:25
Nur erst mal ein Problem: Wenn das Hauptprogramm geschlossen werden soll und noch kopiert wird, soll das natürlich nicht einfach abgebrochen werden.
Das gäb's aber immer
  • Ohne Threads würde das Hauptfenster nicht reagieren, das verleitet Benutzer zum Abschießen...
  • Bei jedem Thread, den Du implementierst, musst Du diese Situation berücksichtigen.

Als simplen Workaround (der aber nicht so schön wäre wie die von jaenicke genannte Queue) könntest Du ein Hilfsprozess beilegen, den Du für jeden Kopierjob startest. Der läuft weiter, parallel (weil eigener Prozess) und auch noch wenn das Hauptprogramm geschlossen wird.
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 10:57
Hallo,

das nacheinander Abarbeiten wäre eine Idee.
Es gibt nämlich noch ein größeres Problem (für mich mit D7):
"Dynamische Variable"
Da man vorher ja nicht weiß, wie oft der User den Kopiervorgang (per Thread) anstößt, also nicht weiß, wie viele Threads gestartet werden, kann man die Threadvariable nicht "vordefinieren" (was auch aus Platz- und Performancegründen sicherlich nicht schön wäre).
Ich kenne aber keine Möglichkeit, Variable während der Laufzeit zu erzeugen. Gibt es da was und das ist mir nur entgangen?
Wenn ich das nacheinander mache, brauche ich aber nur eine Threadvariable.
Und wenn ich den Thread nur über seinen Handle (oder ThreadID) anspreche (per API), brauche ich auch nur eine Variable - nehme ich an. Deshalb auch der "CopyThreadManager". Der hält eine Liste mit den Threadhandlen vor.


Gruß
Mattze
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#6

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 11:25
Hmm... das Problem verstehe ich nicht ganz.

Delphi-Quellcode:
var a: array of TMyThread;
begin
   SetLength(a, 4);
end;
geht nicht unter D7? Ansonsten... TList, gibt es das schon unter D7? Mindestens eine TStringList gibt es da, mit Objekten an jeder Zeile, als unschönen Workaround, wobei ich glaube, dass es eigentlich auch die anderen Dinge (dynamische Arrays und TList) geben dürfte.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 11:34
Das geht!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#8

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 11:41
Hallo,

die Methode kenne ich natürlich auch.
Finde ich hier aber nicht so schön bzw. aufwendiger.
Z. Bsp. möchte ich gerne fertige Threads auch rauslöschen.
Bei solchen Arrays müsste ich da umspeichern usw.
Außerdem wäre da mehr Speicherplatz von Nöten, weil ich eben die ganze Klasse TMyThread im Array halte.
Wenn ich eine TList habe, in der ich die Handles der Threads ablege, ist das Rauslöschen, Thread finden... alles kein Problem!
Halte ich HIER für die günstigere Variante.

Gruß
Mattze

@K-H: Und wie? (Außer mit den dynamischen Arrays von oben.)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.935 Beiträge
 
Delphi 12 Athens
 
#9

AW: SHFileoperatio-Ärger

  Alt 24. Jul 2013, 12:42
Z. Bsp. möchte ich gerne fertige Threads auch rauslöschen.
Bei solchen Arrays müsste ich da umspeichern usw.
Dir ist aber schon klar, dass TList intern ein array of Pointer nutzt?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#10

AW: SHFileoperatio-Ärger

  Alt 27. Jul 2013, 13:48
Hallo,

so, das scheint einigermaßen zu klappen. Mal sehen, wie das in der normalen Arbeit ist...
Es bleibt aber ein Problem:
Wie kriege ich das bei DnD hin?
Per MouseHook? Abfangen und meine MultiThread-Lösung rein? Geht das überhaupt? Habe noch nie mit einem Hook "gespielt". War bisher einfach nicht nötig!
Was meint Ihr? Wie geht's am besten?

Gruß
Mattze
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:27 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