Ich möchte die Priorität eines Echtzeit-Audio-Threads auf Android ändern. Wenn ich TThread.Priority
auf einen Wert außer 0 setze, erhalte ich eine Ausnahme:
EThread: Thread Error: Ungültiges Argument"
Wie setze ich die Thread-Priorität richtig?
Ich möchte die Priorität eines Echtzeit-Audio-Threads auf Android ändern. Wenn ich TThread.Priority
auf einen Wert außer 0 setze, erhalte ich eine Ausnahme:
EThread: Thread Error: Ungültiges Argument"
Wie setze ich die Thread-Priorität richtig?
Auf POSIX-Systemen (wie Android) gibt es eine TThread.Policy
-Eigenschaft, die die Planungspolitik des Threads angibt, die wiederum steuert, wie sich die TThread.Priority
-Eigenschaft verhält. Wahrscheinlich macht der Wert, den Sie für die Priority
zuweisen möchten, innerhalb der aktuellen Policy
keinen Sinn. Zum Beispiel unterstützt eine Policy
von SCHED_OTHER
(Standard) nur eine Priority
von 0, während eine Policy
von SCHED_FIFO
oder SCHED_RR
stattdessen eine Priority
von 1-99 unterstützt (einige POSIX-Systeme können sie sogar auf 32 begrenzen).
Daher müssen Sie sicherstellen, dass die Policy
zunächst auf die gewünschte Richtlinie eingestellt ist, bevor Sie die Priority
nach Bedarf ändern können. Beachten Sie jedoch, dass einige Policy
-Werte wie SCHED_FIFO
und SCHED_RR
Root-/Admin-Rechte erfordern, um ihre Planungs-Priority
zu ändern.
Keine dieser Informationen ist im Embarcadero DocWiki dokumentiert, nicht einmal die Existenz der TThread.Policy
-Eigenschaft. Ich habe den TThread
-Quellcode angesehen und gesehen, dass er die POSIX-Funktionen pthread_getschedparam()
und pthread_setschedparam()
verwendet, um die Werte des Threads für Policy
und Priority
zu erhalten/setzen. Dann habe ich mir Online-Referenzen für diese Funktionen angesehen, wie z.B. diese hier. In Ihrem Fall schlägt pthread_setschedparam()
mit diesem Fehler fehl:
EINVAL policy is not a recognized policy, or param does not make sense for the policy.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.