Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Thread Member size problem (https://www.delphipraxis.net/201052-thread-member-size-problem.html)

erichstuder 19. Jun 2019 08:29

Thread Member size problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

I habe ein Projekt bestehend aus den beiden folgenden simplen files:
Code:
unit MyThread;

interface

uses
  Classes;

type TMyThread = class(TThread)
  private
    a : array[0..432] of Byte; //431 works
end;

implementation

end.
Code:
unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Xml.XMLDoc, Xml.XMLIntf, MyThread;

type
  TForm1 = class(TForm)
  end;

var
  Form1: TForm1;
  xmlDoc : TXMLDocument;
  nodeList : IXMLNodeList;
  myThread : TMyThread;

implementation

{$R *.dfm}

begin
  myThread := TMyThread.Create(true);

  xmlDoc := TXMLDocument.Create(nil);
  xmlDoc.FileName := 'myXml.xml';
  xmlDoc.Active := true;

  nodeList := xmlDoc.DocumentElement.ChildNodes.FindNode('PersonalData').ChildNodes; //never returns if TMyThread member "a" has more than 432 entries
end.
Die letzte Code-Zeile nodeList := ... kehrt nie zurück wenn im thread der member "a" mehr als 432 einträge besitzt (so wie der code oben).
Wird ein Eintrag reduziert dann kehrt die letzte Code-Zeile sofort zurück: a : array[0..431] of Byte;

Ich verstehe nicht warum der Thread und die Verarbeitung vom XML irgendetwas mit einander zu tun haben sollten.
Irgendwie hab ich die Vermutung, dass hier Speicherbereiche überschrieben werden.
Aber warum erscheint keine Fehlermeldung?
Mach ich was falsch?

Für weitere Informationen hab ich das ganze Projekt auch gleich angehängt.
Ich erzeuge ein 32bit Applikation auf einen Windows 10 64bit System

Bin dankbar für jede Antwort
Erich

Blup 19. Jun 2019 10:07

AW: Thread Member size problem
 
[dcc32 Warnung] Main.pas(25): W1020 Instanz von 'TMyThread' mit der abstrakten Methode 'TThread.Execute' wird angelegt

Bitte erst einmal dieses Problem korrigieren.

Neutral General 19. Jun 2019 10:14

AW: Thread Member size problem
 
Zitat:

Zitat von Blup (Beitrag 1435000)
[dcc32 Warnung] Main.pas(25): W1020 Instanz von 'TMyThread' mit der abstrakten Methode 'TThread.Execute' wird angelegt

Bitte erst einmal dieses Problem korrigieren.

Wenn er den Thread nicht startet, ist das irrelevant.
TXMLDocument ist immer etwas seltsam. Bei mir klappts, wenn ich xmlDoc als IXMLDocument deklariere.

Edit: Entweder als IXMLDocument deklarieren, oder man muss beim Create einen Owner <> nil mitgeben.


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf