AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BeginThread, Pointer zu Form

Ein Thema von anse · begonnen am 30. Okt 2006 · letzter Beitrag vom 1. Nov 2006
 
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
196 Beiträge
 
Delphi 11 Alexandria
 
#1

BeginThread, Pointer zu Form

  Alt 30. Okt 2006, 22:23
Hallo,

bin seit Stunden am Rätseln über folgendes Problem:

ich habe hier eine Objekt-Methode und eine Objekt-lose Funktion. In der Objekt-Methode (1. Block) wird BeginThread die Funktion ExecQueryThread als Pointer übergeben:

Delphi-Quellcode:
function TMDIChild.StartExecQueryThread(handler: TCompletionHandler; timeout: Cardinal; window: THandle; SQLQuery: String): Cardinal;
var
  req: Cardinal;
  tp : TThreadParams;
begin
  try
    req := SetCompletionHandler(handler, timeout);
    // set up params for QueryThread
    tp := TThreadParams.Create( SQLQuery, req, self );
    result := req;
    BeginThread(nil, 0, @ExecQueryThread, @tp, 0, req);
    debug(Format('query call started for request id %d.', [req]));
  finally
  end;
end;


function ExecQueryThread( tp: Pointer ): Integer;
var
  qwe : ^TThreadParams;
  zq : TZReadOnlyQuery;
begin
  qwe := tp;
  debug('ExecQueryThread start!');
  try
    qwe.childwin.CheckConnection; <<<<<<<<< Hier knallt's mit AVs
except
exit;
end;
end;

Die Struktur von TThreadParam enthält eine Eigenschaft "childwin" die ein TMDIChild enthält. Im obigen Code wird so ein Objekt erstellt mit TThreadParams.Create( SQLQuery, req, self ); Wobei "self" sich auf das TMDIChild bezieht. Ein TMDIChild ist übrigens ein Fenster mit vielen Controls und Methoden.

Delphi-Quellcode:
type
  TThreadParams = class(TObject)
    public
      query: string;
      ticket: Cardinal;
      childwin: TMDIChild;
      constructor Create(query: string; requestid: cardinal; childwin: TMDIChild);
  end;
Dieser Teil sieht eigentlich in meinen Augen ganz ok aus Sobald ich aber in der "function ExecQueryThread" das TThreadParams-Objekt dereferenziere und dann auf das enthaltene childwin zugreife, hagelt es Access Violations. Sporadisch klappen die Zugriffe, ich erkenne aber kein Muster bisher.

Irgendwie scheint die "childwin"-property oder das ganze TThreadParams-Objekt, in dem das childwin enthalten ist, nicht richtig dereferenziert zu werden. Oder so... Keine Ahnung. Habt ihr einen Rat?
Sorry falls ich was vergessen habe.. ich sehe schon den Wald nicht mehr...
Ansgar Becker
  Mit Zitat antworten Zitat
 


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 06:37 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