AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Container?
Thema durchsuchen
Ansicht
Themen-Optionen

OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Container?

Ein Thema von juergen · begonnen am 15. Okt 2017 · letzter Beitrag vom 27. Okt 2017
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai

  Alt 19. Okt 2017, 15:20
Hallo Codehunter,

erst einmal herzlichen Dank für deine ausführliche Unterstützung!!
Ich glaube () den groben Ansatz habe ich sogar verstanden. Da hab ich an den nächsten Schlecht-Wetter-Wochenenden einiges um mich einzuarbeiten.
Da die Art und Weise deiner Programmierung für mich neue Materie ist, werde ich wohl noch Nachfragen haben.

Also nochmals vielen Dank und einen schönen Tag noch!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai

  Alt 20. Okt 2017, 13:20
Hallo Codehunter,

ich habe interessiert mitgelesen, da ich ein ähnliches Problem mit dem Einlesen von Dateieigenschaften mit Parallelisierung lösen und beschleunigen möchte.
Ich habe deinen Code jetzt pro Forma mal in ein Testprogramm eingebaut und irgendwas stimmt mit der Parametrisierung des synchonize()-Aufrufs noch nicht:

[dcc32 Fehler] uMain.pas(247): E2250 Es gibt keine überladene Version von 'Synchronize', die man mit diesen Argumenten aufrufen kann

in der Codezeile:
    Synchronize(FOnComplete(Self, FFileName));

Hast du ne Idee? (dafür reicht mein Thread-Wissen nicht aus)
Stefan
  Mit Zitat antworten Zitat
TiGü

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

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai

  Alt 20. Okt 2017, 15:03
[dcc32 Fehler] uMain.pas(247): E2250 Es gibt keine überladene Version von 'Synchronize', die man mit diesen Argumenten aufrufen kann

in der Codezeile:
    Synchronize(FOnComplete(Self, FFileName)); Hast du ne Idee? (dafür reicht mein Thread-Wissen nicht aus)

Wenn es in den Mainthread soll:
    Synchronize(nil, FOnComplete(Self, FFileName));

Wie machst du es sonst, wenn der Compiler nach dem Code eintippen meldet das in der Parameterliste ein Argument zuviel oder zuwenig ist?
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai

  Alt 20. Okt 2017, 15:36
Wie machst du es sonst, wenn der Compiler nach dem Code eintippen meldet das in der Parameterliste ein Argument zuviel oder zuwenig ist?
Genau so vor meiner Anfrage gemacht und folgenden einzigen Parameter angezeigt bekommen:
AMethod
Nach dem Hinzufügen eines weiteren Parameters (zb nil) kommt immer noch die gleiche Fehlermeldung.
Es muss also eher an dem Parameter FOnComplete() liegen...

Synchronize(nil, FOnComplete(Self, FFileName));
Stefan

Geändert von GPRSNerd (20. Okt 2017 um 15:40 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai

  Alt 20. Okt 2017, 15:46
Wie machst du es sonst, wenn der Compiler nach dem Code eintippen meldet das in der Parameterliste ein Argument zuviel oder zuwenig ist?
Genau so vor meiner Anfrage gemacht und folgenden einzigen Parameter angezeigt bekommen:
AMethod
Nach dem Hinzufügen eines weiteren Parameters (zb nil) kommt immer noch die gleiche Fehlermeldung.
Es muss also eher an dem Parameter FOnComplete() liegen...

Synchronize(nil, FOnComplete(Self, FFileName));
Abgesehen davon das der Cursor hinter der öffnen Klammer und Ctrl+Shift+Space vier Überladungen für Synchronize zeigt hast du natürlich recht.

Du musst den Code so anpassen:
Delphi-Quellcode:
procedure TMp3ReaderThread.DoComplete;
begin
  if Assigned(FOnComplete) then
  begin
    Synchronize(nil,
      procedure
      begin
        FOnComplete(Self, FFileName)
      end);
  end;
end;
Erklärung:
Es wird einer dieser Typen erwartet:
Delphi-Quellcode:
  TThreadMethod = procedure of object;
  TThreadProcedure = reference to procedure;
FOnComplete ist aber vom Typ TMp3ReaderComplete = procedure (Thread: TMp3ReaderThread; FileName: string) of object; , darum muss man da noch was drumstricken.

Geändert von TiGü (20. Okt 2017 um 17:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai

  Alt 20. Okt 2017, 16:37
Du musst den Code so anpassen:
Delphi-Quellcode:
procedure TMp3ReaderThread.DoComplete;
begin
  if Assigned(FOnComplete) then
  begin
    Synchronize(
      procedure
      begin
        FOnComplete(Self, FFileName)
      end);
  end;
end;
Compiled das bei dir? Ich sehe immer noch die gleiche Fehlermeldung.
Stefan
  Mit Zitat antworten Zitat
TiGü

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

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai

  Alt 20. Okt 2017, 17:05
Du musst den Code so anpassen:
Delphi-Quellcode:
procedure TMp3ReaderThread.DoComplete;
begin
  if Assigned(FOnComplete) then
  begin
    Synchronize(nil,
      procedure
      begin
        FOnComplete(Self, FFileName)
      end);
  end;
end;
Compiled das bei dir? Ich sehe immer noch die gleiche Fehlermeldung.
Ja.
Schreib mal TThread.Synchronize(nil,...

Geändert von TiGü (20. Okt 2017 um 17:07 Uhr)
  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 17:00 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