AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Systemressourcen Problem, wenn ich alle Komponenten erzeuge
Thema durchsuchen
Ansicht
Themen-Optionen

Systemressourcen Problem, wenn ich alle Komponenten erzeuge

Ein Thema von BAMatze · begonnen am 16. Okt 2009 · letzter Beitrag vom 21. Okt 2009
Antwort Antwort
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Systemressourcen Problem, wenn ich alle Komponenten erzeuge

  Alt 16. Okt 2009, 11:50
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:
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;
Vielen Dank im Voraus
BAMatze

Ps.: der Fehler im Thread zum Oszilloskopen betraf den Zugriff vom Thread auf die visuellen Komponenten
2. Account Sero
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#2

Re: Systemressourcen Problem, wenn ich alle Komponenten erze

  Alt 16. Okt 2009, 13:15
Tritt der Fehler auch auf wenn Du DoSendDataPacket mit Synchronize() aufrufst?
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Systemressourcen Problem, wenn ich alle Komponenten erze

  Alt 21. Okt 2009, 07:41
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]
2. Account Sero
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 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