Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Synchronize (https://www.delphipraxis.net/205241-synchronize.html)

venice2 17. Aug 2020 13:00

Synchronize
 
Vielleicht eine dumme frage aber habe keinen erfolg mit Synchronize.

Ich starte in einer DLL einen Thread und möchte den mit dem MainThread aus der Anwendung synchronisieren.
Aber egal in welcher Funktion ich TThread.Synchronize(Queue) aufrufe entweder die Anwendung hängt oder aber es tut sich dann gar nichts mehr.

Also, wo muss ich den Thread synchronisieren
In der Anwendung oder der DLL.

Aber auch in der Anwendung sehe ich keine Verbesserung bzw. meine Zeichnungsroutine synchronisiert nicht mit der aus der DLL.
Was bedeutet das die Zeichnung in der Anwendung aus der DLL hängt und nur die innerhalb der Anwendung selbst wird ausgeführt.
Erst wenn ich das Anwendungsfenster anklicke Rendert das Zeichnen aus der DLL weiter.

Sherlock 17. Aug 2020 13:04

AW: Synchronize
 
https://www.delphipraxis.net/165196-...g-und-dll.html

Sherlock

venice2 17. Aug 2020 13:26

AW: Synchronize
 
Zitat:

Zitat von Sherlock (Beitrag 1471940)

Hilft mir leider nicht weiter ich verwende SendMessage das sollte Threadsafe sein.
Eventuell liegt es am RTTI welches ich deaktiviert habe muss mal schauen.
Delphi-Quellcode:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

TiGü 17. Aug 2020 14:54

AW: Synchronize
 
Bau mal ein kleines Beispielprojekt und lade es gezippt hoch.

himitsu 17. Aug 2020 16:02

AW: Synchronize
 
Mit Packages arbeiten (RTLxxx.bpl)
Dann ist Application in in DLL und EXE das Selbe.


Oder man baut sich für seine DLL eine eigene Message-Loop und behandelt die Messaes, auch für das Synchronize selbst.
z.B. könnte man von der EXE (z.B. Timer, OnIdle oder so) aus das Application.ProgressMessages der DLL aufrufen.

Und ich glaub irgendwie konnte man auch selbst die Bessagebehandlugen der DLL mit denen der EXE verknubbln, aber k.A. nach was (Keyword) man da suchen muß.

venice2 17. Aug 2020 16:16

AW: Synchronize
 
Danke für eure Antworten aber ich glaube BASS_RecordStart ist nicht Threadsafe von daher muss ich für das andere Fenster was zeichnen soll und es nicht tut
einen separaten Channel generieren dann geht es.

Muss mich da mal im Un4Seen Forum informieren.
Ich habe den Channel der in meiner DLL generiert wird nach außen weiter geleitet das scheint aber nicht zu funktionieren auch mit Synchronize(Queue) nicht.

EDIT:
Es lag einfach daran das die Daten zu schnell oder zu langsam übergeben wurden.
Die Verwendung des Callback DuffRecording hat das Problem beseitigt. Lag also nicht am Thread.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 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