Registriert seit: 27. Nov 2017
2.490 Beiträge
Delphi 7 Professional
|
AW: Unit zu unbekanntem Variablentype gesucht (generell)
1. Apr 2024, 09:59
Die KI meiner Wahl hat dazu folgendes zu vermelden:
Zitat von Frage:
Können Sie mir für Delphi die Unit benennen, in der die Klasse TSync definiert ist?
Zitat von Antwort:
Entschuldigung, aber ich konnte keine spezifische Delphi- Unit finden, in der die Klasse TSync definiert ist. Es könnte sein, dass diese Klasse in einer benutzerdefinierten Unit definiert ist oder in einer weniger bekannten oder veralteten Delphi- Unit. Es wäre hilfreich, wenn Sie weitere Details oder den Kontext bereitstellen könnten, in dem Sie diese Klasse verwenden. Bitte überprüfen Sie auch die Dokumentation oder den Quellcode, wenn Sie Zugriff darauf haben.
Quelle: Unterhaltung mit Bing, 1.4.2024
(1) delphi - How do you create a class in one unit, and use it as a return .... https://stackoverflow.com/questions/...-in-another-un.
(2) Programme und Units (Delphi) – RAD Studio. https://docwiki.embarcadero.com/RADS...amme_und_Units.
(3) Klassen und Objekte (Delphi) – RAD Studio. https://docwiki.embarcadero.com/RADS...e_%28Delphi%29.
Zitat von Frage:
Mir ist in dem Zusammenhang nur der nachfolgende Quelltext bekannt:
Delphi-Quellcode:
type
TMyJSON = record
TotalItems: Integer;
Items: TJSONArray;
ItemsArray: Array of TJSon_Items;
Result: Boolean;
end;
var
MyJSON: TMyJSON;
MyJSONArray: TArray<TMyJSON>;
Dummy_Count: Integer;
Tasks: TList<TTask>;
Sync: TSync;
procedure SearchGoogleSingleISBNTask(const Dummy_String: string);
var
MyJSON: TMyJSON;
begin
MyJSON := SearchGoogleSingleISBN(Dummy_String);
// ...weitere Verarbeitung von MyJSON...
end;
begin
Dummy_Count := ListBox1.Count - 1;
SetLength(MyJSONArray, Dummy_Count);
Sync := TSync.Create;
uses System.SyncObjects; // Add this line
for Dummy_Int := Dummy_Count downto 0 do
begin
while Tasks.Count >= 5 do
Sync.WaitFor;
TTask.Create(
procedure
begin
SearchGoogleSingleISBNTask(ListBox1.Items[Dummy_Int]);
Sync.Signal;
end
).Start;
Tasks.Add(TTask.Last);
end;
// Warten auf Abschluss aller Tasks
while Tasks.Count > 0 do
Sync.WaitFor;
// ...Datenbankaktualisierung...
for Dummy_Int := 0 to Dummy_Count do
begin
MyJSON := MyJSONArray[Dummy_Int];
if MyJSON.TotalItems = 1 then
// ...hier Code zur Datenbankaktualisierung...
end;
end;
Zitat von Fortsetzung der Frage:
Können Sie damit etwas anfangen oder ist das bei der Suche hilfreich?
Zitat von Antwort:
Ja, das ist sehr hilfreich. In Ihrem Code verwenden Sie die Klasse 'TSync' aus der Unit 'System.SyncObjects'. Diese Klasse ist Teil der Delphi-Standardbibliothek und wird für die Synchronisation von Threads in einer Multithread-Anwendung verwendet².
In Ihrem speziellen Fall wird 'TSync' verwendet, um die Ausführung von parallelen Tasks zu koordinieren. Die Methode 'WaitFor' blockiert die Ausführung des Hauptthreads, bis ein Signal von einem der parallelen Tasks empfangen wird, das durch die Methode 'Signal' gesendet wird. Dies stellt sicher, dass der Hauptthread auf den Abschluss aller parallelen Tasks wartet, bevor er fortfährt.
Bitte beachten Sie, dass Sie die Unit 'System.SyncObjects' in den Uses-Klauseln am Anfang Ihrer Unit hinzufügen müssen, nicht innerhalb der Prozedur oder Funktion. Hier ist der korrigierte Code:
Delphi-Quellcode:
uses
System.SyncObjects; // Move this line to the top
type
TMyJSON = record
TotalItems: Integer;
Items: TJSONArray;
ItemsArray: Array of TJSon_Items;
Result: Boolean;
end;
var
MyJSON: TMyJSON;
MyJSONArray: TArray<TMyJSON>;
Dummy_Count: Integer;
Tasks: TList<TTask>;
Sync: TSync;
procedure SearchGoogleSingleISBNTask(const Dummy_String: string);
var
MyJSON: TMyJSON;
begin
MyJSON := SearchGoogleSingleISBN(Dummy_String);
// ...weitere Verarbeitung von MyJSON...
end;
begin
Dummy_Count := ListBox1.Count - 1;
SetLength(MyJSONArray, Dummy_Count);
Sync := TSync.Create;
for Dummy_Int := Dummy_Count downto 0 do
begin
while Tasks.Count >= 5 do
Sync.WaitFor;
TTask.Create(
procedure
begin
SearchGoogleSingleISBNTask(ListBox1.Items[Dummy_Int]);
Sync.Signal;
end
).Start;
Tasks.Add(TTask.Last);
end;
// Warten auf Abschluss aller Tasks
while Tasks.Count > 0 do
Sync.WaitFor;
// ...Datenbankaktualisierung...
for Dummy_Int := 0 to Dummy_Count do
begin
MyJSON := MyJSONArray[Dummy_Int];
if MyJSON.TotalItems = 1 then
// ...hier Code zur Datenbankaktualisierung...
end;
end;
Zitat von Fortsetzung der Antwort:
Der Fehler liegt in der Zeile des Quelltextes, die mich sofort stutzig gemacht hat: Das Uses mitten im Quelltext.
Geändert von Delphi.Narium ( 1. Apr 2024 um 12:48 Uhr)
|
|
Zitat
|