Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi String von Thread an Programm senden - Stilfrage! (https://www.delphipraxis.net/109004-string-von-thread-programm-senden-stilfrage.html)

TheMiller 24. Feb 2008 20:26

Re: String von Thread an Programm senden - Stilfrage!
 
Ja, aber ich hab nunmal (leider) DLLs. Vielleicht garnicht so schlecht. Habe glaub ich, wenn ich das alles richtig rauf habe, einiges dazu gelernt.

In meinen Testprogrammen ging das ja alles auch recht easy - waren ja auch keine DLLs! Jedenfalls bedanke ich mich nochmal recht herzlich.

PS: Ähm, ich könnte dieser Container-Klasse doch locker auch ein Array hinzufügen und von der Main-App sicher darauf zugriefen, richtig?

sirius 24. Feb 2008 21:11

Re: String von Thread an Programm senden - Stilfrage!
 
Also, du darfst alle Messages von WM_User bis (ich glaube) $C000 verwenden. du kannst auch noch mehr definieren, genauso, wie du noch mehr Variablen reinlegen kannst.

In dem beginwrite und endwrite etc. den Thread zu unterbechen, dürfte kein Problem sein, Macci. Wie gesagt, wenn die Klasse von TsimpleRWSync abgeleitet ist, dann wird im Hintergrund nur CriticalSection.enter bzw ~.leave aufgerufen. Was genau das TMultiReadExclusiveWriteSynchronizer im Hintergrund macht, ist mir nicht ganz bewusst. Außer dass es eben zwischen lesenden und schreibenden Zugriff unterscheidet. Und das ganze wird mit Events geregelt und mit einigen Interlocked-Funktionen. Sollte zu jedem Zeitpunkt threadsicher sein.

Macci 24. Feb 2008 22:03

Re: String von Thread an Programm senden - Stilfrage!
 
Japp, genau so ist es sirus. Der Unterschied zwischen Lesen und Schreiben wird einfach mit 2 binären Semaphoren von Delphi realsiert. Die könnte man auch selbst programmieren, ist aber hier nicht unbedingt nötig (wieso das Rad neu erfinden?). TMultiReadExclusiveWriteSynchronizer macht, wenn mich nicht alles täuscht, nichts anderes als diese Semaphore zu realsieren.

So wie du es geschrieben hast, müsste es gut funktionieren. Trotzdem sollte man Multithread-Anwendungen natürlich immer ausführlich testen, weil es kann sein, dass es 1000x gutgeht, und dann beim 1001. mal (beim Kunden) nicht. Am besten wäre es, die Funktionalität zu beweisen, was aber sehr schwer ist. (Ich finde dieses Beweisen schon bei Single-Thread Anwendungen sehr schwer)

alzaimar 25. Feb 2008 14:55

Re: String von Thread an Programm senden - Stilfrage!
 
Zitat:

Zitat von Macci
TMultiReadExclusiveWriteSynchronizer macht, wenn mich nicht alles täuscht, nichts anderes als diese Semaphore zu realsieren.

'Nichts anderes' ist eine Untertreibung, schau Dir mal den Code an.

Macci 25. Feb 2008 15:23

Re: String von Thread an Programm senden - Stilfrage!
 
*codeanschau*

Delphi-Quellcode:
  TMultiReadExclusiveWriteSynchronizer = class
  private
...
  public
    constructor Create;
    destructor Destroy; override;
    procedure BeginRead;
    procedure EndRead;
    procedure BeginWrite;
    procedure EndWrite;
  end;
Japp, genau das, was ich sagte. Es sind 2 Semaphore (einer zum Lesen, und einer zum Schreiben).


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 5 von 5   « Erste     345   

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