AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listen vergleichen

Ein Thema von EWeiss · begonnen am 4. Jun 2018 · letzter Beitrag vom 4. Jun 2018
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

Listen vergleichen

  Alt 4. Jun 2018, 13:33
Sorry habe irgendwie wieder was an der Waffel.

Ich erstelle eine Liste von Prozessen und eine Liste von ProzessId's
Die Prozessliste hat 55 Einträge die ich mit meine ProzessId's Liste vergleichen muss (diese hat 4 Einträge).

Habe wieder irgendwo einen Denkfehler wie vergleiche ich die liste nun mit unterschiedlichen Counter?

Ok Schlagt mich ruhig.. LOL

Delphi-Quellcode:
  // prüfen ob aktiver prozess existiert
  for K := 0 to (vProcList.Count - 1) do
  begin
    if vProzessID.Find(vProcList[K].ID, proc) then
    begin
      if proc.ID = vProzessID[K].ID then
        bFound := true;
    end;
  end;
Überschreitet das Maximum logisch vProzessID hat ja nur 4 Einträge.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Listen vergleichen

  Alt 4. Jun 2018, 13:36
Du musst mit zwei geschachtelten Schleifen arbeiten.

Oder nimmst gleich ein TDictionary.


EDIT: Oder schreibst einfach:
Delphi-Quellcode:
  // prüfen ob aktiver prozess existiert
  bFound := false;
  for K := 0 to (vProcList.Count - 1) do
  begin
    if vProzessID.Find(vProcList[K].ID, proc) then
    begin
      bFound := true;
    end;
  end;
Nehme an, das es sich um TStringList handelt?

Geändert von TiGü ( 4. Jun 2018 um 13:38 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Listen vergleichen

  Alt 4. Jun 2018, 13:39
Sorry habe irgendwie wieder was an der Waffel.

Ich erstelle eine Liste von Prozessen und eine Liste von ProzessId's
Die Prozessliste hat 55 Einträge die ich mit meine ProzessId's Liste vergleichen muss (diese hat 4 Einträge).

Habe wieder irgendwo einen Denkfehler wie vergleiche ich die liste nun mit unterschiedlichen Counter?

Ok Schlagt mich ruhig.. LOL

Delphi-Quellcode:
  // prüfen ob aktiver prozess existiert
  for K := 0 to (vProcList.Count - 1) do
  begin
    if vProzessID.Find(vProcList[K].ID, proc) then
    begin
      if proc.ID = vProzessID[K].ID then
        bFound := true;
    end;
  end;
Überschreitet das Maximum logisch vProzessID hat ja nur 4 Einträge.

gruss
Emil es wäre einfacher wenn Du die notwendigen Informationen mitgeben würdest.....
Wie sind Deine Listen definiert?
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Listen vergleichen

  Alt 4. Jun 2018, 13:43
Zitat:
Emil es wäre einfacher wenn Du die notwendigen Informationen mitgeben würdest.....
Wie sind Deine Listen definiert?
Ja sorry

Delphi-Quellcode:
procedure CheckProzessID;
var
  IntI, K, M: Integer;
  vProcList: TProcesses;
  proc: TProcess;
  bFound: BOOL;
begin
  bFound := false;

  // ProcList initialisieren
  vProcList := TProcesses.Create;
  // Prozesse einlesen
  vProcList.ReadSystem;

  // prüfen ob aktiver prozess existiert
  for K := 0 to (vProcList.Count - 1) do
  begin
    if vProzessID.Find(vProcList[K].ID, proc) then
    begin
      if proc.ID = vProcList[K].ID then
        bFound := true;
    end;
  end;

  if not bFound then
  begin
    // Timer deaktivieren
    KillTimer(HSprMaster, ID_MRENDER);
    // Alle Objekte die mit diesen verbunden sind löschen
    for M := 0 to Length(AudioVolumeArr) - 1 do
    begin
      gSprSession.GD_DeleteLinkedObject(succ(ID_BVOLUME) + M);
      // TAudioVolume freigeben
      AudioVolumeArr[M].free;
    end;
    // Array löschen
    SetLength(AudioVolumeArr, 0);
    // Session erstellen
    MainClass.CreateSession;
    // Window aktualisieren
    gSprSession.GI_UpdateWindow(HSprSession, false);
    // Timer aktivieren
    SetTimer(HSprMaster, ID_MRENDER, 60, nil);
  end;
  // Prozessliste löschen
  vProcList.Clear;
  // Prozessliste freigeben
  FreeAndNil(vProcList);
end;
vProzessID: TProcesses; Im Anhang die *.pas mit ihren Möglichkeiten (ist nicht von mir)

gruss

Geändert von EWeiss (11. Jul 2019 um 16:51 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Listen vergleichen

  Alt 4. Jun 2018, 13:52
Du musst mit zwei geschachtelten Schleifen arbeiten.

Oder nimmst gleich ein TDictionary.


EDIT: Oder schreibst einfach:
Delphi-Quellcode:
  // prüfen ob aktiver prozess existiert
  bFound := false;
  for K := 0 to (vProcList.Count - 1) do
  begin
    if vProzessID.Find(vProcList[K].ID, proc) then
    begin
      bFound := true;
    end;
  end;
Nehme an, das es sich um TStringList handelt?
Dann bekomme ich nie den Status false.
Und wenn dann ist er falsch.

gruss
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Listen vergleichen

  Alt 4. Jun 2018, 14:00
So wie ich das sehe hat TiGü recht,
sein Code sollte reichen, könnte man sogar noch etwas beschleunigen wenn man nach dem Finden abbricht.

Delphi-Quellcode:
 // prüfen ob aktiver prozess existiert
  bFound := false;
  for K := 0 to (vProcList.Count - 1) do
  begin
    if vProzessID.Find(vProcList[K].ID, proc) then
    begin
      bFound := true;
      break; // Abbrechen da wir den Process haben
    end;
  end;
Fritz Westermann
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Listen vergleichen

  Alt 4. Jun 2018, 14:02
vProzessID wird von wem mit was befüllt?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Listen vergleichen

  Alt 4. Jun 2018, 14:05
So wie ich das sehe hat TiGü recht,
sein Code sollte reichen, könnte man sogar noch etwas beschleunigen wenn man nach dem Finden abbricht.

Delphi-Quellcode:
 // prüfen ob aktiver prozess existiert
  bFound := false;
  for K := 0 to (vProcList.Count - 1) do
  begin
    if vProzessID.Find(vProcList[K].ID, proc) then
    begin
      bFound := true;
      break; // Abbrechen da wir den Process haben
    end;
  end;
Ich habe es versucht und das Ergebnis ist leider negativ.
Wenn ich nur so prüfe ist bFound immer true und das Ergebnis wäre mein Task mit der ID die nicht mehr existiert wird nicht beendet.

gruss
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Listen vergleichen

  Alt 4. Jun 2018, 14:08
Wenn es so ist steht der Process in vProcessID.
Dein Problem ist in diesem Fall ein anderes......
Wie wäre es mit Debuggen?
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Listen vergleichen

  Alt 4. Jun 2018, 14:09
vProzessID wird von wem mit was befüllt?
Wenn ich die Session addiere dann werden die ProcId's addiert

vProzessID.Add(ProcId, MainClass.DeviceName);

Wenn mein Control entfernt wird und CreateSession wird erneut auf gerufen wird die Liste geleert.

Addiere ich eine Session zur Laufzeit dan nwird die Liste nicht geleert aber die neue ID zur Liste addiert.

Wenn ich nun die Prozessliste mit den vorhandenen ID's vergleiche und ein Prozess wurde beendet soll das entsprechende Control entfernt werden.
Das mache ich auf einfachem Wege indem ich alle lösche und aktive neu erstelle.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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:20 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