![]() |
Systemressourcen Problem, wenn ich alle Komponenten erzeuge
Hallo und Guten Tag an alle DP´ler,
wieder mal ein Problem. Ich verwende, wie ich schon in diversen anderen Threads hier erwähnt habe mehrere Komponenten für mein Programm. Jetzt habe ich folgendes Problem: Wenn ich alles einschalte außer Piezoverschiebetisch (also Controlerboard, Oszilloskop (siehe diesen ![]() Der Fehler, der in dem Thread zum Oszilloscopen aufgeführt ist, sollte nicht auftreten. Ich verwende zwar einen Thread aber der sieht wie folgt aus:
Delphi-Quellcode:
Vielen Dank im Voraus
unit MessThread;
interface uses Windows, SysUtils, Classes, SyncObjs; Type TOnMessWertListcompleted = procedure(Sender: TObject; List: TstringList) of Object; Type TMessThread = class(TThread) private FsLMesswertreihe: TStringList; FiMessAnzahl, FiMessreihe: integer; FCriticalSection: TCriticalSection; FOnMessWertListcompleted: TOnMessWertListcompleted; protected // Ausführung procedure Execute; override; // Setter und Getter function GetMessreihe: integer; procedure SetMessreihe(iWert: integer); function GetMessanzahl: integer; procedure SetMessanzahl(iWert: integer); // Eventhandling procedure DoSendDatapacket; public // Initialisierung und Terminierung constructor create; reintroduce; destructor destroy; override; property MesswertList: TStringList read FsLMesswertreihe; property OnMessWertListcompleted: TOnMessWertListcompleted read FOnMessWertListcompleted write FOnMessWertListcompleted; property Messreihe: integer read GetMessreihe write SetMessreihe; property Messanzahl: integer read GetMessanzahl write SetMessanzahl; // Events end; implementation uses ControlerBoardForm; {////////////////////////////////////////////////////////////////////////////////////} {/ Funktionen für Komunikationsaufbau bzw. -terminierung und /} {/ und Statusüberprüfung /} {////////////////////////////////////////////////////////////////////////////////////} constructor TMessThread.create; begin inherited create(false); FsLMesswertreihe := TStringList.create; FOnMessWertListcompleted := nil; FiMessAnzahl := 7; FiMessreihe := 5; end; destructor TMessThread.Destroy; begin FsLMesswertreihe.Free; inherited destroy; end; procedure TMessThread.Execute; var c, i: integer; begin repeat c := GetTickcount; FsLMesswertreihe.Add(floattostr(Board.anaEingang[1])); if FsLMesswertreihe.Count >= (FiMessAnzahl * FiMessreihe) then DoSendDataPacket; c := {interval}30 - (GetTickCount - c); if c > 0 then Sleep(c); until Terminated; end; {////////////////////////////////////////////////////////////////////////////////////} {/ Eventhandling /} {////////////////////////////////////////////////////////////////////////////////////} procedure TMessthread.DoSendDatapacket; begin if assigned(FOnMessWertListcompleted) then FOnMessWertListcompleted(Self, FsLMesswertreihe); FsLMesswertreihe.Clear; end; {////////////////////////////////////////////////////////////////////////////////////} {/ Setter und Getter /} {////////////////////////////////////////////////////////////////////////////////////} procedure TMessthread.SetMessreihe(iWert: Integer); begin FiMessreihe := iWert; end; procedure TMessthread.SetMessanzahl(iWert: Integer); begin FiMessanzahl := iWert; end; function TMessthread.GetMessreihe; begin result := FiMessreihe; end; function TMessthread.GetMessanzahl; begin result := FiMessanzahl; end; end. // Hier noch der Aufruf des Threads im Programm: procedure TForm4.Button1Click(Sender: TObject); begin if assigned(FMessThread) then begin FMessthread.Free; if assigned(SendList.FsLMesswertListe) then SendList.FsLMesswertListe.Free; end else begin FMessThread := TMessThread.create; try FMessThread.OnMessWertListcompleted := GetMessWertList; SendList.FsLMesswertListe := TStringList.Create; try SendList.Messwertreihen := FMessThread.Messreihe; SendList.Messwertanzahl := FMessThread.Messanzahl; except SendList.FsLMesswertListe.Free; end; except FMessThread.Free; end; end; end; BAMatze Ps.: der Fehler im Thread zum Oszilloskopen betraf den Zugriff vom Thread auf die visuellen Komponenten |
Re: Systemressourcen Problem, wenn ich alle Komponenten erze
Tritt der Fehler auch auf wenn Du DoSendDataPacket mit Synchronize() aufrufst?
|
Re: Systemressourcen Problem, wenn ich alle Komponenten erze
Sorry, dass ich mich erst jetzt wieder melde, war Erkältungsbedingt nicht auf Arbeit bis heute. Werde ichgleich mal testen.
[Edit] Jupp ist der Fehler gewesen. Danke dir.[/Edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz