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 Thread), Kamera, ...) funktioniert alles. Wenn ich andersrum alles einschalte bis auf Oszilloskop (Piezoverschiebetisch, ...) funktioniert auch alles. ABER wenn Oszilloskop und Piezoverschiebetisch zusammen an sind, läuft er maximal kurz und knallt nach ein paar Sekunden mit 2 verschiedenen Fehlermeldungen durch. Eine besagt, dass eine Ressource derzeit genutzt wird, die andere, dass die Ressourcen erschöpft sind. Wie gesagt separat und sehr kurz läuft alles. Irgendwo scheint sich da ein Fehler eingeschlichen zu haben, aber ich weiß nicht mal, wo ich da anfangen könnte zu suchen, weil ja separat alles läuft. Ich glaube nicht, dass der Rechner zu leistungsschwach ist. Kennt jemand dieses Problem und kann mir eventuell einen Hinweiß geben, bei dem das auftritt? 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 00:45 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