Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
23. Jan 2017
Ist eigentlich nur ein Interna. Konkret wird bei konstanten Strings der RefCount immer auf -1 gesetzt, um zu verhindern, dass der Speicher für den String ungewollt freigegeben wird. Die Online-Hilfe dokumentiert dieses Verhalten hier:
Im Grunde geht es bei const S: String weniger um den RefCounter ansich, sondern unnötige lokale Kopien und Speicheroperationen. Wenn man sich mal anschaut, wie...
Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
23. Jan 2017
Das const ist tatsächlich nicht zwingend erforderlich, sondern nur eine Performance-Optimierung (const und var werden intern als Pointer umgesetzt, wie a.def korrekterweise angemerkt hat). Im Falle von String bewirkt es vor allem, dass die automatische Referenzzählung deaktiviert und grade KEINE lokale Kopie erzeugt wird.
Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
23. Jan 2017
Leider nicht :? Zumindest nicht, als ich das letzte Mal einen Blick drauf geworfen habe. Tatsächlich habe ich mir dann beholfen, indem ich zwei ThreadPools manuell erstellt habe, wobei Der mit den priorisierten Tasks 10 gleichzeitig abarbeiten durfte, während der andere Pool auf Zwei beschränkt war. Ist natürlich auch nicht wirklich ideal.
Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
23. Jan 2017
Exakt :) Du fütterst den Pool mit Tasks und der Rest sollte dann automatisch ablaufen.
Wenn ich das richtig in Erinnerung habe, skaliert der Default-Pool die maximale Anzahl an Threads anhand der CPU Spezifikation (Anzahl der Kerne) und der CPU Auslastung, also ist eher ein globaler Wert. Für deinen Anwendungsfall würde ich keinen seperaten Pool erstellen.
Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
23. Jan 2017
Schau dir mal TThreadPool an. Der ist genau für solche Zwecke gedacht. Du kannst dort einen MaxThreadCount einstellen und Tasks queuen. Der Pool arbeitet dann alle Aufgaben ab, aber erstellt nie mehr gleichzeitige Threads als angegeben (ist btw. auch deutlich performanter, da Thread Creation zumindest unter Windows einen ziemlichen Overhead hat und der ThreadPool die Threads wiederverwendet).