AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi nonVCL Thread Klasse: Probleme mit der Deklaration
Thema durchsuchen
Ansicht
Themen-Optionen

nonVCL Thread Klasse: Probleme mit der Deklaration

Ein Thema von Zacherl · begonnen am 7. Mär 2007 · letzter Beitrag vom 8. Mär 2007
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

nonVCL Thread Klasse: Probleme mit der Deklaration

  Alt 7. Mär 2007, 19:11
Hi,

ich schreibe an einer Unit, die das TThread Object für nonVCL Programme implementiert. Leider stoße ich schon ziemlich am anfang auf ein Problem:

Delphi-Quellcode:
unit Threads;

interface

uses
  Windows;

type
  TThread = class(TObject)
  private
    FThreadID: DWORD;
    FThreadHandle: THandle;
    function ThreadCallback(Data: Pointer): LongInt; stdcall;
  public
    constructor Create(CreateSuspended: boolean);
    destructor Destroy; override;

  protected
    procedure Execute; virtual;
  end;

implementation

constructor TThread.Create(CreateSuspended: boolean);
begin
  if CreateSuspended then
  begin
    FThreadHandle := CreateThread(nil, 0, TFNThreadStartRoutine(@ThreadCallback), CREATE_SUSPENDED, 0, ThreadID);
  end
    else
  begin
    FThreadHandle := CreateThread(nil, 0, TFNThreadStartRoutine(@ThreadCallback), nil, 0, ThreadID);
  end;
end;

destructor TThread.Destroy;
begin
  //
end;
Und zwar wird mir "TFNThreadStartRoutine(@ThreadCallback)" angezeigt mit der Meldung "Variable" erforderlich .. ich vermute mal ThreadCallback darf keine Funktion eines Objektes sein ..

Nehme ich die Callback Funktion nun aber aus dem Object raus und deklariere sie einfach im implementation Teil, woher soll ich dann wissen von welchem TThread Object ich die Execute Methode aufrufen soll?

Hat jemand eine Lösung für dieses Problem?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: nonVCL Thread Klasse: Probleme mit der Deklaration

  Alt 7. Mär 2007, 21:07
1. Der Parameter CREATE_SUSPENDED steht an der falschen Stelle.
2. Die Thread-Prozedur selbst musst du klassenlos machen.
3. Du solltest "Self" als "lpParameter" hinter der Thread-Startadresse übergeben, denn
4. dann erhält die Thread-Prozedur das Objekt als Parameter und kann damit "Execute" aufrufen.

// Nachtrag

Etwa so:

Delphi-Quellcode:
function ThreadCallback(Data: Pointer): LongInt; stdcall;
begin
  Result := TThread(Data).Execute;
end;

constructor TThread.Create(CreateSuspended: boolean);
const
  SuspOrNot: array [Boolean] of DWORD = ( 0, CREATE_SUSPENDED );
begin
  FThreadHandle := CreateThread(nil, 0, @ThreadCallback, Self, SuspOrNot[CreateSuspended], ThreadID);
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: nonVCL Thread Klasse: Probleme mit der Deklaration

  Alt 7. Mär 2007, 21:18
Ah dankeschön So geht es .. (Parameter kamen, weil ich die Funktion grade aus dem Kopf so getippt habe)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: nonVCL Thread Klasse: Probleme mit der Deklaration

  Alt 7. Mär 2007, 21:57
Und statt CreateThread solltest du BeginThread nehmen, da BeginThread automatisch die globale Variable IsMultiThread setzt, um den Heap threadsafe zu machen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: nonVCL Thread Klasse: Probleme mit der Deklaration

  Alt 8. Mär 2007, 12:39
BeginThread ist aber wenn ich nicht irre in der SysUtils Unit deklariert, oder?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: nonVCL Thread Klasse: Probleme mit der Deklaration

  Alt 8. Mär 2007, 12:43
nein ist es nicht. Die Funktion ist in der Unit "System" declariert und implementiert. Hätte dir aber auch die Hilfe verraten
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: nonVCL Thread Klasse: Probleme mit der Deklaration

  Alt 8. Mär 2007, 12:44
Habs falsch gelesen Naja, dann vielen Dank euch!
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 08:32 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