Announcement

Collapse
No announcement yet.

EAccesViolent und Thread

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

  • EAccesViolent und Thread

    Hallo,

    in der Execute-Procedure eines Threads versuche ich ein Fenster aufzurufen und dort Textfelder zu beschreiben.

    a) Geht das ueberhaupt ?

    folgendes brachte mir eine exception zur laufzeit :
    (Eine die von EAccesViolant abgefangen wird, also Speicherzugriffsverletzung)

    --------------------------------------------------------------------------
    procedure TMessThread.Execute(hdl :THandle);

    var MPUCom : TSerialIO;
    // ComControl : KL6Control5B;
    // Receive: Byte;
    // Send: SendByte;
    Rb : BYTE;
    Sb : BYTE;
    stringfollows: boolean;
    stringchain : BYTE;
    idx : InTeger;
    MessWindow : TTest;
    work : boolean;
    BLenght : integer;
    Buffer : PChar;

    begin
    MessWindow.show;
    MessWindow.enabled;
    work := true;
    idx := 0;
    end;

    unit Messung;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, SerialCIO, comxio;

    type
    TTest = class(TForm)
    StaticText1 : TStaticText;
    StaticText2 : TStaticText;
    Label1 : TLabel;
    Label2 : TLabel;
    I_L1 : TMemo;
    U_L1 : TMemo;
    Ciao : TButton;

    procedure CiaoClick(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }

    end;

    implementation

    {$R *.DFM}

    procedure TTest.CiaoClick(Sender: TObject);
    begin
    close;
    end;

    --------------------------------------------------------------------------

    Haengt das jetzt damit zusammen, dass ich einen Thread habe, bzw. wie kann ich das Problem loesen ?

    Gruss

    Frank

  • #2
    Hallo,

    das Grundproblem besteht darin, das viele Win32-API-Fensterfunktionen nur in dem Thread aufgerufen werden dürfen, in dem das Fenster erzeugt wurde. Soll auf Fenster (Formulare) des primären Threads direkt zugegriffen werden, ist der Einsatz von <b>Synchronize</b> am sichersten (es sei denn, man kann ganz genau abschätzen, das bei den eigenen Aufrufen keine Probleme auftreten können).

    Generell ist es also keine gute Idee, diese Aufgabe in einen zweiten Thread auszulagern

    Comment

    Working...
    X