AW: Threads und TBitmaps
Dann ist es entweder die Delphi Version, die den Unterschied macht, oder, was wahrscheinlicher ist, das Durchsteppen wurde nicht so durchgeführt, wie es muss, damit der fehler auftaucht.
Zum Nachvollziehen habe ich ein Video gelinkt Es zeigt das Kompilieren, welches am Haltepunkt (Thread-constructor) stoppt, und daraufhin mit F7 gedrückt weiterläuft. PS: Deine Exception wird nicht angezeigt |
AW: Threads und TBitmaps
Zitat:
Und bitte genau den Quelltest und nicht irgendeinen - CopyPaste |
AW: Threads und TBitmaps
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, UThread; type TForm1 = class(TForm) Image1: TImage; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public { Public-Deklarationen } end; var Form1: TForm1; Paintthread : TPaintThread; i : Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Paintthread := TPaintThread.create(false); end; procedure TForm1.Timer1Timer(Sender: TObject); begin inc(i); Paintthread.zeichnen; end; end.
Delphi-Quellcode:
unit UThread;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls; type Image = TImage; TPaintThread = class(TThread) private Zeichenflaeche: TImage; Original, MyBild : TBitmap; i : integer; protected procedure Execute; override; public procedure zeichnen; constructor Create(CreateSuspended: Boolean); end; implementation constructor TPaintThread.Create(CreateSuspended: Boolean); begin inherited; end; procedure TPaintThread.Execute; begin While (Terminated = False) do begin Synchronize(Zeichnen); sleep(1); end; end; procedure TPaintThread.Zeichnen; begin inc(i); end; end.
Delphi-Quellcode:
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1}, UThread in 'UThread.pas'; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. |
AW: Threads und TBitmaps
Der Timer ist aus.
|
AW: Threads und TBitmaps
Meine Versuche mit dem Timer zeigen, dass der Fehler auftaucht, wenn sich der thread mit sleep(1) aktualisiert, jedoch nicht aufzutreten scheint, wenn er sich mit sleep(1000000) aktualisiert, also nichts tut.
Das deutet darauf hin, dass die beiden threads indirekt miteinander kollidieren, auch wenn sie sich niemals Prozeduren oder deklarierte Variablen teilen. Wie das möglich ist, oder wie sich das mit Synchronize deckt, da hab ich keine Ahnung :evil: |
AW: Threads und TBitmaps
Gibt auch keine Fehler, aber wozu willst du die Methode
Delphi-Quellcode:
überhaupt von aussen aufrufen?
TPaintThread.zeichnen
|
AW: Threads und TBitmaps
Ich denke, ich kann das Problem (oder jedenfalls ein ähnliches) jetzt reproduzieren.
Man nehme einen Timer auf der Form 1 und gebe
Delphi-Quellcode:
ein. Der Haltepunkt sollte darauf liegen.
Paintthread.zeichnen;
Der Thread muss erstellt sein und seine Methode
Delphi-Quellcode:
sein. Jetzt einfach starten und F7 drücken, fertigWhile (Terminated = False) do begin end; |
AW: Threads und TBitmaps
Sollte das bei dir keinen Fehler geben, liegt das Problem wohl am Delphi 7 Debugger.
Neben dem jetzigen Fehler habe ich eben einen bordbk70.dll access violation bekommen, der scheinbar mit Delphi 7 verbunden ist.# Zudem mehrere schwere Fehler beim Debuggen, woraufhin Delphi geschlossen werden musste. Das wäre eine Erklärung für das Desaster hier...Delphi 7 mag einfach noch keine Threads... |
AW: Threads und TBitmaps
Eigentlich schon, aber wohl nicht solche komischen Sachen, die du da machst. ;)
|
AW: Threads und TBitmaps
Ich verwende schrittweises Kompilieren immer zur Fehlersuche.
Wenn dadurch in Verbindung mit Threads aber zusätzliche Fehler entstehen bzw. der Compiler aufhört weiterzuspringen dann ist Fehlersuche kaum möglich. Werde wohl oder übel ohne die Funktion weitermachen müssen ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:28 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