Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi thread fehler: coInitialize wurde nicht aufgerufen ? (https://www.delphipraxis.net/87495-thread-fehler-coinitialize-wurde-nicht-aufgerufen.html)

agm65 1. Mär 2007 13:17


thread fehler: coInitialize wurde nicht aufgerufen ?
 
diesen fehler bekomme ich, wenn ich mein thread starte ? woran kann das liegen ?


Delphi-Quellcode:
var
 id1:longword;

Procedure test(Parameter : Pointer);
begin
showmessage('mein thread');
end;

BeginThread(nil, 0, Addr(test), nil, 0, id1);

agm65 1. Mär 2007 14:34

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
kann es sein , dass threads mit dualcores abkacken ?

shmia 1. Mär 2007 15:06

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Warum verwendest du nicht die Klasse TThread?
Das sähe dann so aus:
Delphi-Quellcode:
procedure TAgm65Thread.Execute;
var
   i : integer;
begin
  CoInitialize(nil);
  try
     for i:=0 to 100 do
     begin
        sleep(100);
        Beep(1000 + i*20, 30);
        if i = 50 then
           Synchronize(Ausgabe);
     end;
  finally
     CoUninitialize;
  end;
end;
procedure TAgm65Thread.Ausgabe;
begin
   ShowMessage('Meldung vom Thread');
end;
ShowMessage innerhalb eines Threads (ohne Synchronize) ist übrigens verboten.
Zitat:

Zitat von agm65
kann es sein , dass threads mit dualcores abkacken ?

NEIN, kein Problem.

Zacherl 1. Mär 2007 15:08

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Füge mal die Unit ActiveX hinzu und rufe vor dem Erstellen des Threads CoInitialize(nil) auf.

agm65 1. Mär 2007 15:45

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Zitat:

Zitat von Florian Bernd
Füge mal die Unit ActiveX hinzu und rufe vor dem Erstellen des Threads CoInitialize(nil) auf.

danke läuft perfekt

agm65 1. Mär 2007 15:52

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
bekomme jetzt eine fehler meldung ungültiges fenster handle...gibt es bestimmte arten wie man in einem thread fenster behandelt ?

auf einmal verschwindet mein button ;) ?

shmia 1. Mär 2007 15:58

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Zitat:

Zitat von agm65
bekomme jetzt eine fehler meldung ungültiges fenster handle...gibt es bestimmte arten wie man in einem thread fenster behandelt ?

Dacht ich schon, dass das nicht perfekt funktioniert. Hast du gelesen, was ich oben geschrieben habe ?
ShowMessage innerhalb eines Threads (ohne Synchronize) ist übrigens verboten.
Hast du umgestellt auf die TThread-Klasse??? Wenn nein, warum nicht???

Bernhard Geyer 1. Mär 2007 15:58

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Zitat:

Zitat von agm65
bekomme jetzt eine fehler meldung ungültiges fenster handle...gibt es bestimmte arten wie man in einem thread fenster behandelt ?

auf einmal verschwindet mein button ;) ?

Stabil bekommst du das gar nicht hin. Die VCL ist nicht Thread-Save! Du mußt wenn schon auf pure Win32-API zurückgehen.

agm65 1. Mär 2007 16:02

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
also vcl und threads nicht zusammen ohne fehler ?? aber ich brauche eine anzeige.. damn

shmia 1. Mär 2007 16:06

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Zitat:

Zitat von agm65
also vcl und threads nicht zusammen ohne fehler ??

Kann das sein, dass du etwas beratungsresistent bist??
Mein Fragen werden von dir auch nicht beantwortet. :evil:
Du sollst die Klasse TThread in Verbindung mit der Methode Synchronize verwenden!

agm65 1. Mär 2007 16:09

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
hey sorry...das war echt unhöflich....okay kannst du mir genu erklären wie ich das machen ? ich habe keinen plan... :) sorry nochmal

DGL-luke 1. Mär 2007 16:14

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Hallo,

du musst ganz einfach alle fensteroperationen im hauptthread durchführen. das machst du mit Delphi-Referenz durchsuchenSynchronize.

agm65 1. Mär 2007 16:21

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
kannst du mir code dazu posten ich stehe grade total auf dem schlauch...kriege nichtmal den hauptthread hin. okay ich bin morgen wieder da...in aller frische ! aber danke für kommenden antworten !

agm65 2. Mär 2007 09:58

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
*push*

DGL-luke 2. Mär 2007 17:39

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Hallo,

implementiere einfach ein neues TThread-Derivat (Date->Neu->Thread).

Definiere ein public-feld "window" bzw. ein private-Feld "Window", das du im Konstruktor belegen lässt.

Definiere eine Prozedur "DoWindowOperation", in der du Fenster-Operationen durchführst und private-felder für alle Informationen, die diese Prozedur brauchen könnte.

In deiner überschriebenen Execute-Methode gehst du nun so vor:

Delphi-Quellcode:
self.WindowOperationType := wotSetLabelCaption;
self.WOpTargetLabel := SomeLabelIGotTheReference;
self.WOpTargetLabelNewCaption := '95%'; //whatever...

Synchronize(DoWindowOperation);
Selbstverständlich kannst du auch eine extra-Prozedur "UpdateProgressLabel" definieren.

Wichtig: Diese Prozedur kann leider keine Parameter übernehmen.

agm65 12. Mär 2007 18:51

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
also wenn ich zB das einbinde, dann bringt er mir das Synchronize als bezeichner nicht gefunden ?

Delphi-Quellcode:
unit Unit2;

interface

uses
  Classes;

type
  test = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;
  end;

implementation

{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
  nur in einer Methode namens Synchronize aufgerufen werden, z.B.

      Synchronize(UpdateCaption);

  und UpdateCaption könnte folgendermaßen aussehen:

    procedure test.UpdateCaption;
    begin
      Form1.Caption := 'Aktualisiert in einem Thread';
    end; }

{ test }

procedure test.Execute;
begin
  { Thread-Code hier einfügen }
end;

end.

ste_ett 12. Mär 2007 19:18

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Zitat:

Zitat von Florian Bernd
Füge mal die Unit ActiveX hinzu und rufe vor dem Erstellen des Threads CoInitialize(nil) auf.


DGL-luke 13. Mär 2007 15:39

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, im Anhang ein Demoprojekt. Sollte eigentlich selbsterklärend sein.

Deinem ActiveX-Problem hilft das aber nicht.

EDIT: Neu hochgeladen.

agm65 13. Mär 2007 15:44

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
cool danke, ich kriege die zip file nicht entpackt ;) lol weder mit rar noch mit zip

! H:\thread-form-demo.zip: Unknown method in Pthreadform.bdsproj
! H:\thread-form-demo.zip: Unknown method in Pthreadform.dpr
! H:\thread-form-demo.zip: Unknown method in UfoMain.dfm
! H:\thread-form-demo.zip: Unknown method in UfoMain.pas
! H:\thread-form-demo.zip: Unknown method in UthrThread.pas
! H:\thread-form-demo.zip: Keine Dateien zum Entpacken

DGL-luke 13. Mär 2007 15:56

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
Hallo,

sorry, 7zip verwurschtet die zip-archive da :roll: ich schieb gleich oben n neues rauf.

agm65 13. Mär 2007 16:03

Re: thread fehler: coInitialize wurde nicht aufgerufen ?
 
danke dir !


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 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