Allg Frage zu DLL

Hallo,

würde gern wissen ob es Sinn macht eine Selbstgeschriebene DLL zusätzlich
noch in einen eigenen Thread zu laden?
Wenn ja wäre es die beste Methode es die DLL machen zu lassen oder beim
Aufruf der DLL-Funktionen?

Danke.
 
Wenn wir wuessten was du genau machen willst, koennten wir dir auch sagen ob es ne gute oder schlechte Idee ist.

ne Dll iss nix anderes, nen extra codeblock, denn dynamisch zuladen kannst. nur mit eigenen Ressourcen (unter windows).
Also die unterschiede zu ner lib sind nur im laden, und halt wie dein zeugs gelinkt wird / wie an die adressen deiner funktionen rankommst. Threadtechnisch kannst da drinnen den selben unfug treiben wie in jedem hauptprogramm auch :-)

Also prinzipiell kannst du es natuerlich machen ....

Ich selber hab ne menge Dlls, die man expliziet "starten" (also dll laden, und nen selbst definierten start befehl absetzen) kann, die baun intern dann 1 oder mehrere threads auf, und bringen die events mittels callbacks ins hauptprogramm.

Musst dir natuerlich im klaren sein, dass die events (callbacks) andere threads sind ...
Also Daten schuetzen ! und nich auf die GUI direkt schreiben lassen, sondern immer entkoppeln, entweder ueber postmessage, oder Container / WM_Timer polling. (Windows)

Ciao ...
 
Zuletzt bearbeitet:
Guten Morgen,

Danke RHBaum für deine Antwort. Mir war nicht so 100%tig klar ob durch
eine DLL eine direkte verbesserung des Programmes selber hervorgerufen
werden kann. Aber aus deinem Text konnte ich entnehmen, das es nicht
so ist.
In meinem Fall ist meine DLL das Macros ausführen soll (und es können/
müssen auch mehrere gleichzeiten laufen können ohne das das Mainprog
hängen bleibt).

Wie ganau meinst du das
>Also Daten schuetzen ! und nich auf die GUI direkt schreiben lassen, sondern immer >entkoppeln, entweder ueber postmessage, oder Container / WM_Timer polling.
mit Daten schützen, entkoppeln ...
Über eine kleine Anleitung/ Tip / Link wäre ich dir Dankbar.
 
ne dynamische biblio hat genau 2 vorteile.

- programm und module sind 100% entkoppelt, binaer unabhaengig. Sobald du die schnittstelle nich aenderst, kannst du die Dlls austauschen wie magst, ohne das Hauptprogramm anfassen zu muessen. (vorteile beim vertreiben der software)

- du kannst bei bedarf laden. wenn dein code anteil der dll nie gebraucht wird, weil der user nie eine bestimmte funktion benutzt, dann muss die dll nich geladen werden.
Der ladevorgang des hauptprogramms geht dann schneller, das hauptprogramm iss nich so gross /monolithisch ... Wird auch gern zum verwalten / auslagern von ressourcen (mehrsprach versionen) genommen.

Das ganze hat aber auch nachteile.
dynamisch laden iss ne menge overhaed, den selber schreiben musst ...
Funktionspointer funktionen , am aufruf selber kann der compiler nich viel optimieren
Man kriegt nich alles ueber ne Dll schnittstelle ... da sind auch grenzen.
Exportiert man klassen, wird die dll kompilerabhaengig, etc ... man sollt also schon gut mit C umgehen koennen :-)

Alles andere wird durch ne dll nich beeinflusst ...
fuer MT isses wirklich fast egal, wo die codebloecke liegen. also kein unterschied ob du im hauptprogrammm bleibst oder in ne dll auslagerst ....

Also Daten schuetzen ! und nich auf die GUI direkt schreiben lassen, sondern immer >entkoppeln, entweder ueber postmessage, oder Container / WM_Timer polling.
mit Daten schützen, entkoppeln ...
Wenn du mehrere threads hasst, musst du natuerlich aufpassen, dass die nich paralell auf die daten zugreifen ... wenn der eine schreibt, waehrend der andere grad liest, gibts salat :-)
CriticalSection / Mutex sind hier die stichwoerter
Threads musst eh synchronisieren, also kommst auch um events nich drumherum.

Auf die GUI darf eigentlich immer nur 1 thread zugreifen, sonst gibts da auch aerger.
das windows nachrichtensystem ist da ganz praktisch, weil da eben ne entkopplung schon drinn ist. es gibt den NachrichtenSchleifenthread, der meist auch der hauptthread ist.
Mit postmessage schreibst eigentlich nur ne nachricht in ne queue rein. und der nachrichtenschleifen-thread arbeitet die dann ab. deswegen isses da egal, ob das nen fremder thread ist, der da mit postmessage was zum fenster schickt.
Anders bei sendmessage ....

bei QT z.B. isses auch so, nur dass man da keine Nachrichtenschleifen hat. Also arbeitet man da mit anderen mitteln. Man baut nen "automaten" wo man die zustaende der Anzeige pflegt, und mit nem timer , der natuerlich vom hauptthread kommt, fragt man den status ab und setzt dann die gui entsprechend ....

Ciao ...
 
Zurück