dll und Multithreading

Alles rund um die Programmierung mit Qt
Antworten
donako
Beiträge: 3
Registriert: 20. Februar 2017 16:37

dll und Multithreading

Beitrag von donako »

Hi,

ich habe eine relativ undokumentierte dll die problemlos als einzelner Thread läuft. Wenn ich jedoch versuche diese dll in einem 2 Thread zu starten bekomme ich eine Zugriffsverletzung.

ich habe mal Spaßeshalber die dll kopiert und den 2. Thread mit der Kopie gestartet, dann funktioniert es.

Kann mir jemand nen Hinweis geben woran es liegt oder was ich lesen muss um das auf die Reihe zu bekommen? Bei google hab ich nix gefunden.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: dll und Multithreading

Beitrag von Christian81 »

ich habe mal Spaßeshalber die dll kopiert und den 2. Thread mit der Kopie gestartet, dann funktioniert es.
Was meinst Du damit und ist es eine Qt-Lib?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
donako
Beiträge: 3
Registriert: 20. Februar 2017 16:37

Re: dll und Multithreading

Beitrag von donako »

nein, keine QT-Lib und ich lade sie dynamisch mit LoadLibrary da ich keine Header-Datei habe. Ich lade also die xxx1.dll in Thread1 und xxx2.dll in Thread2. Das funktioniert.

Lade ich aber xxx1 in Thread1 und Thread2 dann gibts eine exception.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: dll und Multithreading

Beitrag von Christian81 »

Dann musst Du wohl die Dll in dem Thread laden in dem Du sie auch benutzen willst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
donako
Beiträge: 3
Registriert: 20. Februar 2017 16:37

Re: dll und Multithreading

Beitrag von donako »

sry christian, ich drück mich wohl falsch aus.

Zum testen benutze ich aktuell einfach 2 threads.

Situation 1:

es existiert nur eine dll die ich auch lade x1.dll

1 Thread läuft fehlerfrei durch.

Situation 2:

es existiert nur eine dll die ich auch lade x1.dll

thread 1 und 2 laufen ein stück weit(ich sehe das weil sie 2 dateien erzeugen) dann wirft irgendein Thread ne exception (nach relativ kurzer Zeit).

Situation 3: (nur zum testen)

ich habe eine kopie der dll erzeugt die ich jetzt mal x2.dll nenne.
ich lade in Thread1 x1.dll und in Thread2 x2.dll

Thread 1 und 2 laufen fehlerfrei durch
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: dll und Multithreading

Beitrag von veeman »

Eine DLL mit dem ein und dem selben (Pfad-)Namen wird lediglich nur einmal geladen. wird ein zweiter Versuch unternommen die selbe DLL nochmal zu laden wird ein Handler auf die bereits geladene DLL zurückgegeben.

Ist nun die DLL nicht threadsicher knallt es an der Stell wo zwei Threads die DLL verwenden.
Antworten