Announcement

Collapse
No announcement yet.

Verwendung von Thread in ActiveX Komponente geht nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verwendung von Thread in ActiveX Komponente geht nicht

    Hallo Leute, ich bin neu hier im Forum und hoffe, dass ihr mir mit diesem Problem weiterhelfen könnt. Ich muss zur Zeit eine ActiveX Komponente entwickeln und habe Probleme bei der Verwendung von Threads in ActiveX. In einer normalen Delphi Komponente tritt dieses Problem nicht auf.

    Ich habe eine Delphi Komponente geschrieben, die eine Methode (StartThread) beinhaltet welche einen Thread (CamThread) startet. Dieser Thread löst alle 100ms Sekunden, über die Methode (UpdateLabel) einen Event aus. So weit funktioniert das ganze auch ohne Probleme. Wenn ich allerdings die Komponente in eine ActiveX Komponente umwandel funktioniert der Thread nicht mehr. Es kommen keine Events mehr alle 100ms aus der Komponente. Um sicherzugehen, dass es nicht die Events sind, die Probleme bereiten, habe ich noch eine Funktion hinzugefügt (StartEvent), die einen einzelnen Event auslöst. Diese funktioniert. Nur eben der Thread scheint in der Active X Komponente nicht zu laufen . Hier der Code:

    Code:
    interface  
    
     
    uses  
      Windows, Messages, SysUtils, Classes, Controls;  
    
     
    type  
      TCameraResultEvent = procedure(Sender: TObject) of object;  
      TLTB = class(TWinControl)  
      private  
        FOnCameraResult: TCameraResultEvent;  
        { Private-Deklarationen }  
      protected  
      public  
        constructor Create(Owner: TComponent); override;  
        procedure StartEvent;  
        procedure StartThread;  
      published  
        property OnCameraResult : TCameraResultEvent  
          read FOnCameraResult write FOnCameraResult;  
      end;  
    
    
      CamThread = class(TThread)  
      private  
        procedure UpdateLabel;  
      public  
        constructor Create(CreateSuspended :boolean; TwinC: TLTB);  
      protected  
        procedure Execute; override;  
      end;  
    
     
    procedure Register;  
    
     
    var  
      Thread : CamThread;  
      TWin : TLTB;  
    
     
    implementation  
    
     
    constructor TLTB.Create(Owner: TComponent);  
    begin  
      inherited Create(Owner);  // Geerbten Konstruktor aufrufen.  
      Thread := CamThread.Create(true,self);  
    end;  
    
     
    procedure CamThread.UpdateLabel;  
    begin  
      TWin.StartEvent;  
    end;  
    
     
    constructor CamThread.Create(CreateSuspended :boolean; TwinC: TLTB);  
    begin  
      inherited Create(CreateSuspended);  
      TWin := TwinC;  
    end;  
    
     
    procedure CamThread.Execute;  
    var  
      i: integer;  
    begin  
      for i:=0 to 100000 do begin  
        Synchronize(UpdateLabel);  
        sleep(100);  
      end;  
    end;  
    
     
    procedure TLTB.StartThread;  
    begin  
      Thread.Resume;  
    end;  
    
     
    procedure TLTB.StartEvent;  
    var i : integer;  
    begin  
        if Assigned(FOnCameraResult) then FOnCameraResult(self);  
    end;  
    
     
    
     
    procedure Register;  
    begin  
      RegisterComponents('Beispiele', [TLTB]);  
    end;  
    
     
    end.
    Ich würde mich riesig freuen , wenn mir da jemand weiterhelfen kann.
    MfG Tanja
    Zuletzt editiert von Tanja; 25.09.2007, 21:08.
Working...
X