Einzelnen Beitrag anzeigen

Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: DLL Tparallel.for loop deadock

  Alt 13. Okt 2021, 19:22
Also ganz ehrlich, das kann doch nicht sein?! Irgendwas läuft da grundlegend falsch.
Ich dachte, ok paralell geht nicht, steige ich - mit mehraufwand - auf normale threads um.
Es stellt sich raus, ...das geht genauso wenig.

Nehmen wir folgende minimalklasse
Delphi-Quellcode:
type
  tmythread = class(Tthread)
    procedure Execute; override;
  end;

Procedure tmythread.Execute;
Begin
  While Not Terminated Do
  Begin
    Sleep(1000);
    Writeln(Timetostr(Now));
  End;
End;
und packen sie in eine standalone exe. ...

Delphi-Quellcode:
 with tmythread.Create(true) do
  begin
    start;
    waitfor;
    free;
    end; //unbeachtet der endlosschleife hier
gibt das ganz normal jede sekunde eine zeit aus. Soweit so gut,

packe ich DENSELBEN code in eine dynamisch geladene dll

..NIX

Der Thread (zum testen innerhalb der dll "gestartet") gibt nix aus. Es zeigt sich dass, beim Aufruf der Methode "start"
a) irgendein Tobject.create aufgerufen wird (ok kann ja im hintergrund sein)
b) direkt dabei eine access violation auftritt bei

Delphi-Quellcode:


function _ClassCreate(InstanceOrVMT: Pointer; Alloc: ShortInt): Pointer;
//..
  CALL DWORD PTR [EAX] + VMTOFFSET TObject.NewInstance

//..
end;
Im Call-Stack listet er dann noch system.classes.objecttexttoresources() auf, das ist dann aber so tief in den internals der rtl. Ich dachte nicht dass mich so ein code überhaupt tangiert..?


Das "onidle" wie ganz zu beginn mal angemerkt, wurde auch hier exportiert. Aber es kann doch nicht sein,ddass ich *keinen* einzigen Thread in der dll laufen lassen kann (außer app main thread)?

Ich bin echt ratlos, liebe leute.
Danke schon mal für euer feedback.
  Mit Zitat antworten Zitat