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
Mattze

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

AW: SHFileoperatio-Ärger

  Alt 27. Jul 2013, 17:07
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
  Mit Zitat antworten Zitat
Mattze

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

AW: SHFileoperatio-Ärger

  Alt 28. Jul 2013, 10:01
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
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
677 Beiträge
 
FreePascal / Lazarus
 
#3

AW: SHFileoperatio-Ärger

  Alt 31. Jul 2013, 11:51
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?
  Mit Zitat antworten Zitat
Mattze

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

AW: SHFileoperatio-Ärger

  Alt 1. Aug 2013, 09:50
Hallo CCRDude,

FreeOnTerminate ist schon klar, aber die Frage war etwas anders.
Funktioniert das evtl. nur, wenn der Thread mit einer Variable im Hauptprogramm "angemeldet" ist?
Es kann - und wird bestimmt auch - prinzipiell funktionieren. Aber denkbar wäre auch so eine (falsche) Einschränkung.

Mit der automatischen Freigabe der Threads ist das so eine Sache. Manchmal führt das tatsächlich zu einem Speicherleck. (Ich nehme an, immer dann, wenn man im Thread etwas createt hat und es im Thread.destroy nicht frei gibt - oder geben kann. Z. Bsp. bei SHFileOperation. Da scheint einiges angelegt zu werden und erst bei Beendigung oder Cancel wieder frei gegeben zu werden. Im Thread.destroy kommt man da nicht ran. Machst Du das im Thread - wie oben - wird zwar der Thread von Delphi freigegeben, nicht aber die von SHFileOperation angelegten Objecte - nehme ich an. FastMM4! Aber auch das scheint nicht ganz so einfach.)

Warum soll ich immer das ganze Threadobject mitschleppen, wenn ich doch eigentlich nur das Handle brauche?
Allerdings bin ich momentan am Überlegen, ob eine TObjectList der Threads nicht vielleicht doch die bessere Lösung wäre.

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 15:43 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