![]() |
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 03:23 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