Я хотел установить приоритет разработанного пользовательского пула потоков. поэтому я обнаружил, что для установки приоритета нужно использовать метод pthred pthread_setschedparam
. Поскольку pthread_t
и native_handle_type
отличаются, я сделал что-то вроде этого -
void SetPriority(int id, int priority, int policy) {
bool ret = true;
sched_param sch_params;
sch_params.sched_priority = 20;
pthread_t p;
p.p = threads_[id].native_handle();
if (pthread_setschedparam(p, SCHED_FIFO, &sch_params)) {
std::cerr << "Failed to set Thread scheduling : " << std::strerror(errno) << std::endl;
}
}
Я получаю нарушение прав доступа для pthreadVC2.dll
.
Чтобы проверить, что у меня правильная версия Windows, я сделал некоторый тест, подобный этому -
int main(){
pthread_t thread1, thread2;
int thr = 1;
int thr2 = 2;
// start the threads
pthread_create(&thread1, NULL, *threadfn, (void *)thr);
pthread_create(&thread2, NULL, *threadfn, (void *)thr2);
sched_param sch_params;
sch_params.sched_priority = 20;
if (pthread_setschedparam(thread1, SCHED_FIFO, &sch_params)) {
std::cerr << "Failed to set Thread scheduling : " << std::strerror(errno) << std::endl;
}
// wait for threads to finish
int po1, po2;
sched_param sched_param1, sched_param2;
pthread_getschedparam(thread1,&po1,&sched_param1);
pthread_getschedparam(thread2, &po2, &sched_param2);
cout << "thread 1:policy - " << po1 << " priority - " << sched_param1.sched_priority << endl;
cout << "thread 2:policy - " << po2 << " priority - " << sched_param2.sched_priority << endl;
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
Я обнаружил, что ошибка № 1 (приоритет не установлен).
И оба потока, имеющие политику 0 и приоритет 0
Как правильно установить приоритет pthread и как я могу использовать эту функцию из std :: thread?
Редактировать: Настройка среды Windows:
Использование Visual Studio 2015 с Windows 10.
Загруженный pthread (pthreads-w32-2-9-1-release.zip) с ftp: //sourceware.org/pub/pthreads-win32/.
настройка проекта - включены дополнительные каталоги включения
Linker> General и задайте расположение библиотеки pthread
Дополнительные зависимости: pthreadVC2.lib и pthreadVCE2.lib
и скопировал pthreadVC2.dll в каталог проекта.