AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Multithreating und DLLs, seltsamer Fehler mit OmniThreadLibrary
Thema durchsuchen
Ansicht
Themen-Optionen

Multithreating und DLLs, seltsamer Fehler mit OmniThreadLibrary

Ein Thema von geskill · begonnen am 5. Sep 2012
Antwort Antwort
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#1

Multithreating und DLLs, seltsamer Fehler mit OmniThreadLibrary

  Alt 5. Sep 2012, 17:22
Hey,
ich hatte vor ein paar Tagen ja kleines Projekt von mir hochgeladen, den HTTPManager. Nun bin ich dabei dies in DLLs zu nutzen, wobei der HTTPManager im eigentlichen Hauptprogramm erstellt wird (als Singelton) und die DLL nur eine Interface-Instanz davon bekommt.

Wenn die DLL nun die "erste" Singelton Instanz bekommt, dann gibt es am Programmende einen Fehler (sonst nicht, also wenn sie im Hauptthread erstellt wird):
Zitat von Fehlermeldung:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EOSError mit der Meldung 'Systemfehler. Code: 1400.
Ungültiges Fensterhandle' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Zitat von Aufruf-Stack:
OtlTaskControl.TOmniTask.InternalExecute(???)
OtlTaskControl.TOmniTask.Execute
OtlThreadPool.TOTPWorkerThread.ExecuteWorkItem(??? )
OtlThreadPool.TOTPWorkerThread.Execute
Ich könnte mir auch vorstellen, dass es ein Fehler in der OmniThreadLibrary ist, aber mein Multithreating wissen ist noch sehr spärlich, deshalb glaube ich eher ich mache hier irgendwas falsch.

Um den Fehler zu umgehen könnte man natürlich generell einfach folgendes in der Datei für das Singelton Interface machen:
Delphi-Quellcode:
initialization
  TApiHTTPManager.GetInstance;

Zuvor hatte ich noch einen Fehler, dass die Informationen für einen Request die in der DLL erstellt werden (HTTPRequest, HTTPOptions) nicht mehr freigegeben wurden und es zu weiteren Fehler kam. Dies habe ich gelöst, indem ich die Interfaces kopiert habe. Das habe ich alles händisch gemacht und mir dafür Clone Konstruktoren erstellt. Kann man dies nebenbei vielleicht irgendwie vereinfachen?

Generell stellt sich mir auch die Frage ist das alles so sauber umgesetzt, gibt es Stellen die problematisch sind und was könnte man vielleicht leichter anders besser machen?

Ich habe das komplette Demo Programm im Anhang und versucht alle unwichtigen Teile zu entfernen, trotzdem kann es im ersten Moment etwas unübersichtlich aussehen, deshalb noch eine Grafik in der Hoffnung das es das Verständnis vereinfacht.

Ich selber benutze D2010 aber mit 2009 sollte man es auch noch kompilieren können.

Grüße und schonmal vielen Dank im voraus!
Miniaturansicht angehängter Grafiken
httpmanager.png  
Angehängte Dateien
Dateityp: zip HTTPManager Test.zip (2,08 MB, 8x aufgerufen)
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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