![]() |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Ich verstehe auch nicht ganz, was du zu erreichen suchst oder dir erhoffst. Ist das "umwandeln" wirklich so aufwändig? Wenn ja, und das mehr oder minder gleichzeitig geschehen soll, würde ich dem Thread doch einmal mit auf den Weg geben, wie der Dateiname lauten soll und ihn dann das komplette Umwandeln, Anlegen der Datei, Reinschreiben und schließen übernehmen lassen.
Und: Wozu die WinAPI-Funktionen? Ich finde die Delphi-Klasse TThread viel sympathischer :love: |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Ok, werde ich machen, kennt ihr ein paar gute Links zu dem Thema ?
Einen hab ich grad gefunden ![]() @Der schöne Günther, das habe ich ja alles gemacht in der Funktion Umwandler |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Ja, genau dieses Tutorial ist auch das einzige, was ich wirklich gelesen habe :lol:
Trotzdem bin ich kurz danach auf ![]() Ich weiß nicht, was genau in deiner Threadfunktion vor sich geht, aber da Datei-Operationen auf Prozessbasis stattfinden könnte ich mir irgendwie vorstellen, dass der zweite Thread bsp. solange blockiert, bis der erste seine Datei zuende geschrieben hat. Welche Funktionen für die Dateioperationen benutzt du und in welcher Reihenfolge? |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Hallo,
eine Sache ist bei Dateioperationen grundsätzlich zu beachten: meist ist der Dateizugriff der Flaschenhals; mit parallelen Zugriffen bremst man eine Festplatte (zumindest eine klassische) eher aus als das die Gesamtoperation beschleunigt wird. Will sagen: Bevor Du Dein Programm parallelisierst, schau erst mal, wo genau die Zeit liegen bleibt. Gruß xaromz |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Also die Funktion Umwandler sieht so aus:
Delphi-Quellcode:
Ob es TProcess in Delphi gibt weiß ich nicht genau.
function Umwandler(pDateiname: Pointer): Integer;
var AProcess: TProcess; begin AProcess := TProcess.Create(nil); try AProcess.Executable := ExtractFilePath(application.ExeName)+'Umwandler.exe'; AProcess.Parameters.Add(PThreadParams(pDateiname)^.Dat); AProcess.Options := AProcess.Options + [poWaitOnExit, poNoConsole]; AProcess.Execute; finally AProcess.Free; end; end; Danke für die Antworten. |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Ich bin verwirrt. Ich dachte, es geht um Threads? Entweder ist es für mich noch zu früh am Morgen, oder...
Du machst eine Reihe von Threads auf, wartest im Hauptprogramm auf die Beendigung des Threads, den du zuletzt aufgemacht hast. Der muss überhaupt nicht zwingend der letzte sein, wenn der zu Ende ist, können noch gut zehn andere laufen, obwohl sie früher gestartet wurden. Die Threads selber erstellen einen komplett neuen Prozess (!), und warten wiederum auf die Beendigung dieses. Wozu überhaupt die Threads? Du kannst diese PRozesse doch genauso gut im Hauptthread deines Programms starten lassen. Dass die Threads hier keinen Geschwindigkeitsvorteil bringen ist doch klar ;-) - Wenn es vorher schon auf mehrere Prozesse hinauslief, dann waren es vorher so oder so auch schon mehrere Threads. mfg |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Am sinnvollsten wäre alle Programme zu starten und dann zu warten bis die alle fertig sind. Das war es dann auch schon.
|
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Zitat:
Ein Lesekopf kann nicht gleichzeitig an mehreren Stellen sein. Da summieren sich die Positionierungszeiten... Wenn man regelmässig so etwas machen muss, ist bessere Hardware (SSD) oder mehrere HDDs erforderlich. Ausserdem weist man Threads verschiedenen Cores zu - wenn man welche hat... |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
1. Hinweis: Festplatten sind nicht Thread-fähig.
2. Hinweis: Um Thread-Programmierung richtig zu machen, braucht man einiges an Erfahrung. Unser Hirn kann einfach keine Parallel-Kodierung leisten. Deshalb, such dir ein gutes Beispiel. Wobei die meisten Beispiele ziemlich kümmerlich sind. |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Naja und im übrigen - wie es auch in der SQLite Docu verlinkt ist -
![]() Mavarik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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