Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   SHFileoperatio-Ärger (https://www.delphipraxis.net/175843-shfileoperatio-aerger.html)

Mattze 24. Jul 2013 11:41

AW: SHFileoperatio-Ärger
 
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.)

jaenicke 24. Jul 2013 12:42

AW: SHFileoperatio-Ärger
 
Zitat:

Zitat von Mattze (Beitrag 1222470)
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?

Mattze 24. Jul 2013 13:44

AW: SHFileoperatio-Ärger
 
Hallo,

ist mir schon klar.
Ich bin nur sehr faul und da kommt es mir entgegen, dass TList einen Haufen Dinge zur Verfügung stellt, die ich sonst alle selber coden müsste.
Wer weiß, ob ich das richtig hinkriegen und wie lange das dauern würde.
Im Grunde brauche ich ja nur eine Liste von 32-Integer. Soweit ich weiß, ist da TList die beste Variante.

Gruß
Mattze

hathor 25. Jul 2013 21:55

AW: SHFileoperatio-Ärger
 
Schon mal Microsoft's free RoboCopy getestet?
...es ist in den Windows-Versionen ab Vista, also auch in Windows Servern 2008 standardmäßig dabei und kann direkt aus der Kommandozeile heraus bzw. in der Powershell verwendet werden.

http://de.wikipedia.org/wiki/Robocopy
GUI: http://www.chip.de/downloads/Robocop..._28220207.html

Mattze 26. Jul 2013 05:29

AW: SHFileoperatio-Ärger
 
Hallo,

Robocopy wäre sicherlich eine Alternative.
Ich hätte das bloß gerne direkt als Programmierschnittstelle.

Ein externes Programm aufzurufen, finde ich nicht soo toll.

Also, ein Interface oder ähnliches für Delphi (7 prof) - das wär's!
Gibt's sowas? Ich habe noch nix gefunden.

Gruß
Mattze

Mattze 27. Jul 2013 13:48

AW: SHFileoperatio-Ärger
 
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

jaenicke 27. Jul 2013 15:57

AW: SHFileoperatio-Ärger
 
Drag and Drop? Wie meinst du das?
Dort, wo du die Behandlung startest, kannst du das doch entsprechend umsetzen. Ich verstehe nicht wo du da die Notwendigkeit für einen Hook siehst.

Mattze 27. Jul 2013 17:07

AW: SHFileoperatio-Ärger
 
Hallo,

ich sehe das auch nicht, aber ich weiß nicht, wie ich das sonst machen soll.
Ich nutze eine Komponente (VirtualTreeview, genauer: VirtualExplorerEasyListview),
die DnD offenbar über SHFileOperation selber bastelt.
Und da ist das eben nicht mehr multithreaded.
Die Frage ist also, wie ich das da abfange und, wenn ich in der Source rumfummle, ob ich da wirklich alles finde.
Ich fände es günstiger, wenn ich es vollständig selber machen könnte, also das DnD vor der Komponente abfangen könnte.

Vielleicht würde es ja auch ausreichen, dass Copywindow von Windows nicht modal zu machen. Irgendwo habe ich mal sowas gelesen, dass das der eigentliche Grund für die Probleme wäre.

Gruß
Mattze

Mattze 28. Jul 2013 10:01

AW: SHFileoperatio-Ärger
 
Hallo,

ich überlege hin und her und kriege es nicht raus. Es geht nicht um DnD, sondern das davor!
Ich erzeuge den Thread ohne Variable einfach mit "TMyThread.create(false)".
Den Handle des Threads speichere ich mit in einer TList (TCList.add(Pointer(self.handle)) in TMyThread.create).

Gibt Delphi den Thread nun bei Programmende selber frei (auch ohne Variable) oder muss ich das von Hand im OnClose (oder OnCloseQuery) des Hauptformulars machen?
Delphi-Quellcode:
      for a:=0 to TCListe.Count-1 do begin
        terminatethread(Cardinal(TCListe[a]),i);
        waitforsingleobject(Cardinal(TCListe[a]),300);
        closehandle(Cardinal(TCListe.items[a]))
      end;
Die Frage gilt für D7 prof.

Gruß
Mattze

CCRDude 31. Jul 2013 11:51

AW: SHFileoperatio-Ärger
 
Delphi gibt den Thread nur dann frei (nicht bei Programmende sondern Threadablaufende), wenn dieser FreeOnTerminate gesetzt hat.

Warum speicherst Du nicht die Thread-Objekte selber in der Liste?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.
Seite 2 von 3     12 3      

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