G
Guest
Уважаемые специалисты ;-)
Пишу многопоточный сортировщик методом Хаора.
Если не использовать многопоточность, то все работает нормально все сортируется.
Незнаю как конкретно прикрутить многопоточность сюда, вобщем это мое первое многопоточное приложение.
Еще количество потоков необходимо указывать в переменной, т.е. не возможно ручками создавать каждый поток отдельно.
Пишу вот такой код:
Создал сначала клас для потоков потом создаю экземляры класса
либо через массив SortThread *S1Thread[2];
либо через вектор vector <SortThread*> S1Thread(2);
Далее выделяю память
for (int num=0; num<=numThread-1; num++){
S1Thread[num] = new SortThread(false); //запускаем все потоки
S1Thread[num]->FreeOnTerminate = true;
}
Все компилируется нормально даже работает если указать кол-во дополнительных поток 1, т.е
vector <SortThread*> S1Thread(1);
Скажите правильно ли я это делаю?
И если можно подскажите какой нибудь отладчик для многопотокового приложения?
Или я не в курсе как это сделать в Билдере?
Просматриваю потоки через прогу Process Explore, она пишет что у моих дополнительных поток один и тот же адресс в памяти, неуверен может это и правильно, у каждого потока ID разные, но выполняется только один и главный.
Process Explorer пишет для процессов которые работаю Статус Ready, а для неработающих Статус Wait: UserRequest. И еще у этих процессов время которое они работаю меньше секунды, т.е. они просто создались и чего то ждут. А у работающий дополнительный процесс время идет.
Хочу заметить что в программе я нигде процессы не прерываю.
Пишу многопоточный сортировщик методом Хаора.
Если не использовать многопоточность, то все работает нормально все сортируется.
Незнаю как конкретно прикрутить многопоточность сюда, вобщем это мое первое многопоточное приложение.
Еще количество потоков необходимо указывать в переменной, т.е. не возможно ручками создавать каждый поток отдельно.
Пишу вот такой код:
Создал сначала клас для потоков потом создаю экземляры класса
либо через массив SortThread *S1Thread[2];
либо через вектор vector <SortThread*> S1Thread(2);
Далее выделяю память
for (int num=0; num<=numThread-1; num++){
S1Thread[num] = new SortThread(false); //запускаем все потоки
S1Thread[num]->FreeOnTerminate = true;
}
Все компилируется нормально даже работает если указать кол-во дополнительных поток 1, т.е
vector <SortThread*> S1Thread(1);
Скажите правильно ли я это делаю?
И если можно подскажите какой нибудь отладчик для многопотокового приложения?
Или я не в курсе как это сделать в Билдере?
Просматриваю потоки через прогу Process Explore, она пишет что у моих дополнительных поток один и тот же адресс в памяти, неуверен может это и правильно, у каждого потока ID разные, но выполняется только один и главный.
Process Explorer пишет для процессов которые работаю Статус Ready, а для неработающих Статус Wait: UserRequest. И еще у этих процессов время которое они работаю меньше секунды, т.е. они просто создались и чего то ждут. А у работающий дополнительный процесс время идет.
Хочу заметить что в программе я нигде процессы не прерываю.