Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fremde Anwendung zerstört Thread (https://www.delphipraxis.net/177074-fremde-anwendung-zerstoert-thread.html)

EWeiss 14. Okt 2013 21:03

AW: Fremde Anwendung zerstört Thread
 
Nur wenn ich beides deaktiviere im Destroy wird das Rendern in der anderen Anwendung weitergeführt.

Delphi-Quellcode:
    CancelWaitableTimer(VisTimer);
    CloseHandle(VisTimer);

Hmm.. Das kann es aber nicht sein Oder?
Welche alternativen bleiben mir dann noch?
Ich benötige einen WaitableTimer damit die Anwendungen bei aktionen die das Plugin betreffen
Konfiguration und so weiter nicht hängen bleibt.


Zitat:

Allerdings frage ich mich, ob es bei deinem Anwendungszweck überhaupt Sinn macht einen Namen für den Timer anzugeben. Warum machst du das? Denn viel sinnvoller wäre doch wohl mit unbenannten Timern unabhängig voneinander zu arbeiten, oder?
Und das könnte mein Probelm beheben ?
Wenn das so einfach ist probiere ich es doch gleich mal ;)


gruss

BUG 14. Okt 2013 21:06

AW: Fremde Anwendung zerstört Thread
 
Zitat:

Zitat von EWeiss (Beitrag 1232020)
Jo.. Ich schließe das Handle.
Delphi-Quellcode:
  if VisTimer <> 0 then
  begin
    if not Suspended then
      ThreadHalt;

    CancelWaitableTimer(VisTimer);
    CloseHandle(VisTimer);
  end;
Werde mal versuchen wie es sich verhält wenn ich auf CloseHandle verzichte.
Abgesehen von eventuellen Speicherlecks die dann wieder entstehen.

Damit lässt du genau das Falsche weg :mrgreen:
CloseHandle zerstört den Timer nicht, wenn es noch andere Handles darauf gibt.
Aber: CancelWaitableTimer schaltet ihn auf inaktiv, sodass der andere Prozess nicht mehr signalisiert wird.

Die saubere Lösung wäre es, einen privaten Timer zu verwenden. Also entweder kein Name oder ein privater Namespace.
Zitat:

The object can be created in a private namespace. For more information, see Object Namespaces.


// EDIT: Zu langsam :shock: Ich hab nur den Beitrag von EWeiss gesehen gehabt.

jaenicke 14. Okt 2013 21:11

AW: Fremde Anwendung zerstört Thread
 
Zitat:

Zitat von EWeiss (Beitrag 1232024)
Und das könnte mein Probelm beheben ?
Wenn das so einfach ist probiere ich es doch gleich mal ;)

nil statt einem Namen angeben, das funktioniert z.B. bei Pipes oder Events genauso.

EWeiss 14. Okt 2013 21:14

AW: Fremde Anwendung zerstört Thread
 
WOW jo.. kann mich nur Herzlich bei euch bedanken das behebt einige diverse andere probleme.
Wußte nur nicht das hier einfach ein nil genügt um andere Anwendungen auszusperren.

Naja denke mal das wird auch anderen helfen die ähnliche probleme damit haben.

gruss

Zacherl 14. Okt 2013 22:34

AW: Fremde Anwendung zerstört Thread
 
Jap, das meinte ich mit Shared :P Die Timer API scheint dann ähnlich wie CreateMutex() oder CreateEvent() zu arbeiten. Dort sind die "named" Varianten auch immer Shared im gesamten Benutzerkontext.

EWeiss 14. Okt 2013 22:46

AW: Fremde Anwendung zerstört Thread
 
Zitat:

Zitat von Zacherl (Beitrag 1232034)
Jap, das meinte ich mit Shared :P Die Timer API scheint dann ähnlich wie CreateMutex() oder CreateEvent() zu arbeiten. Dort sind die "named" Varianten auch immer Shared im gesamten Benutzerkontext.

Danke .. Habe ich nicht gewußt

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr.
Seite 2 von 2     12   

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