Api pthread tối nghĩa cho chủ đề ưu tiên không chỉ dễ hiểu, mà còn không hoạt động trên Android.thay đổi mức độ ưu tiên của chuỗi gốc trên Android bằng c/C++
Vì vậy, có cách nào để tôi giảm hoặc tăng mức ưu tiên của chuỗi không?
int currentPolicy;
struct sched_param sched;
status = pthread_getschedparam(pthread_self(), ¤tPolicy, &sched);
printf("sched.sched_priority:%d currentPolicy:%d", sched.sched_priority, currentPolicy);
printf("priority min/max:%d/%d", sched_get_priority_min(currentPolicy), sched_get_priority_max(currentPolicy));
kết quả đầu ra:
sched.sched_priority: 0 currentPolicy: 0
ưu tiên min/max: 0/0
Ngoài ra, không có vấn đề gì tôi làm, pthread_setschedparam luôn trả về lỗi cho tôi (Đối số không hợp lệ). Trong mã của tôi, tôi cần phải giảm ưu tiên của chuỗi xử lý của tôi để đảm bảo rằng các chủ đề khác sử dụng thời gian cpu hơn. Hoặc, cách khác, tôi có thể tăng ưu tiên luồng của chủ đề khác mà tôi muốn sử dụng càng nhiều CPU so với các luồng khác trong tiến trình của tôi.
Có cách nào để tôi làm điều đó không? Tôi chỉ sử dụng mã C++ gốc.
Chỉnh sửa: Từ bài đăng này có vẻ như chuỗi của Android là một số loại quy trình trọng lượng nhẹ và để sửa đổi mức độ ưu tiên cho chúng setpriority nên được sử dụng. Có vẻ như chức năng hoạt động (getpriority trước và sau chỉ ra rằng ưu tiên đã được sửa đổi). Tuy nhiên, tôi không thấy hiệu ứng mong đợi trong ứng dụng của mình.
"* ... pthread_setschedparam luôn trả về lỗi cho tôi (đối số không hợp lệ). *", Vì vậy bạn có thể cho chúng tôi biết những gì bạn đã chuyển vào hàm để trả về 'EINVAL' không? – alk
cho currentPolicy Tôi đã cố gắng chuyển tất cả các giá trị có sẵn (0, 1, 2, 3). Đối với sched.sched_priority tôi đã cố gắng thiết lập giá trị khác nhau (-10, 10 vv). Tất cả thất bại. – Pavel