AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verständnisproblem / Threadproblem ?
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisproblem / Threadproblem ?

Ein Thema von th_bone · begonnen am 12. Dez 2005 · letzter Beitrag vom 20. Dez 2005
Antwort Antwort
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#1

Verständnisproblem / Threadproblem ?

  Alt 12. Dez 2005, 14:30
Hi,

der erste Codeabschnitt funktioniert ohne Probleme - nehme ich denselben Code aber in das
onExecute auf - dann bricht delphi mit

'Exception der Klasse EOleSysFehler - CoInitialize wurde nicht aufgerufen aufgetreten'

was ist den Coinitialize ? bzw. was muß ich tun um den code im 2ten codeabschnitt zu nutzen ?
wo liegt das Problem ?

Danke für die Hilfe

so funktioniert der code
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  dataobj: iordata;
  mysymbol: string;
begin
  mysymbol:=cxtextedit1.text;
  dataobj := (ORSyncConnection1.Request(mysymbol) as iordata);
  processtransaction(dataobj);
end;
hier soll der code hin
Delphi-Quellcode:
procedure TForm1.tcpServerExecute(AContext: TIdContext);
var
  dataobj: iordata;
  mysymbol: string;
begin
  mysymbol:=cxtextedit1.text;
  dataobj := (ORSyncConnection1.Request(mysymbol) as iordata);
  processtransaction(dataobj);
end;
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Verständnisproblem / Threadproblem ?

  Alt 12. Dez 2005, 15:34
wenn du mit com objekte arbeitest muss in jedem thread coinit aufgerufen werden.
tu im constructor des thread coinit aufrufen und im destructor uninit.

dann klappt das auch.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Verständnisproblem / Threadproblem ?

  Alt 12. Dez 2005, 16:36
Hi,

gibts dazu irgendwo ein einfaches Bsp - ich muß gestehen ich hab im moment keine Ahnung
wo und vor allem wie ich das machen kann...

und das MSDN, Delphi Hilfe und Luckys Thread Tutorial bringen mich da einfach nicht weiter

Tschö

Ralf
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Verständnisproblem / Threadproblem ?

  Alt 19. Dez 2005, 19:22
Hi,

ich werde verrückt ich bekomme es einfach nicht gebacken wie oder wo ich
das eintragen muß

Zitat:
wenn du mit com objekte arbeitest muss in jedem thread coinit aufgerufen werden.
tu im constructor des thread coinit aufrufen und im destructor uninit.
wo finde ich den den constructor bzw. destructor zu diesem thread ?

Jetzt hab ich mir das Buch 'COM/Dcom für Delphi zugelegt aber ich
drehe mich einfach auf der Stelle

hat den niemand einen codeschnipsel als Bsp

Danke

Ralf
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Verständnisproblem / Threadproblem ?

  Alt 20. Dez 2005, 01:41
eigendlich im source des threads ...

wenn du nicht mehr code postestes können wir dir die stelle nicht zeigen.
aber irgendwo im code steht normalerweise:


Delphi-Quellcode:
tThreadTyp = class(tthread)
 ...bla...

  constuctor Create ..bla...
end;
und dazu schaust du dir die implementierung an und fügst das init ein.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Verständnisproblem / Threadproblem ?

  Alt 20. Dez 2005, 09:55
CoInitialize und CoUnInitialize müssen im Kontext des Threads aufgerufen werden.
Also sind der Konstruktor und Destruktor tabu, da diese im Kontext des Hauptthreads aufgerufen werden.
Deshalb muss das innerhalb von [TThread].Execute stattfinden:
Delphi-Quellcode:
procedure TCOMThread.Execute;
begin
   CoInitialize(nil);
   try
      // hier findet die eigentliche Arbeit statt

   finally
      CoUninitialize;
   end;
end;
Jetzt muss man aber noch etwas aufpassen!!
Wenn ein Interface-Pointer noch "lebt", nachdem CoUninitialize aufgerufen wurde, dann liegt ein Fehler vor.
Deshalb wird die "eigentliche Arbeit" ausgelagert:
Delphi-Quellcode:
procedure TCOMThread.InnerExecute;
var
   a,b, c : IUnknown;
begin
   // hier findet die eigentliche Arbeit statt
end;

procedure TApartmentThread.Execute;
begin
   CoInitialize(nil);
   try
      InnerExecute;
   finally
      CoUninitialize;
   end;
end;
Andreas
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Verständnisproblem / Threadproblem ?

  Alt 20. Dez 2005, 18:04
@Shmia

Hi,

danke Dein Bsp. hat mir erst mal sehr weitergeholfen... ich war schon froh das ich die
COM Schnittstelle normal zum laufen gekriegt hatte aber zusammen mit threads ist
oft zum verzweifeln ...

Danke

Ralf

P.S. danke natürlich auch an alle anderen die mir geholfen haben
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Verständnisproblem / Threadproblem ?

  Alt 20. Dez 2005, 18:22
Hallo,
noch ein Hinweis für die Theorie:
Jeder Thread muss unter COM/DCOM sein eigenes Apartment anmelden. Das geschieht durch den Aufruf von CoInitialize und CoUnInitialize.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#9

Re: Verständnisproblem / Threadproblem ?

  Alt 20. Dez 2005, 18:58
Hi,

ja das ist auch sehr schön in dem COM/DCOM Buch von Andreas Kosch beschrieben, aber wie
mans praktisch Umsetzt - steht auf einem anderen Blatt... und am besten lerne ich halt aus
kleinen CodeBsp und die sind in dem Bereich sehr rar

Tschö

Ralf
  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 03:08 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