3 Stimmen

Einstellen der TThread-Priorität auf Android

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?

5voto

Remy Lebeau Punkte 498719

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.com

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.

Powered by:

X