У меня есть программа с основная резьба и диагностика нить. Основной поток - это в основном цикл while(1)
, который выполняет различные задачи. Одна из этих задач - предоставить механизм диагностики с информацией о системе, а затем проверить ее позже (т. Е. В следующем цикле), чтобы увидеть, есть ли какие-либо проблемы, с которыми нужно бороться. Итерация основного контура должна занимать не более 0,1 секунды. Если все в порядке, тогда у диагностического механизма почти нет времени, чтобы вернуться с ответом. Однако, если есть проблема, механизм диагностики может занять несколько секунд, чтобы изолировать проблему. По этой причине каждый раз, когда диагностический движок получает новую информацию, он закручивает новый поток диагностики.Boost threads: возможно ли ограничить время работы нитки, прежде чем переходить на другую резьбу
Проблема, с которой мы сталкиваемся, заключается в том, что поток диагностики убирает время от основного потока. Эффективно, хотя у нас есть два потока, основной поток не может работать так часто, как хотелось бы, потому что диагностический поток все еще вращается.
Использование потоков Boost, можно ли ограничить время, в течение которого поток может работать, прежде чем переходить к другому потоку? Также важно отметить, что используемый нами алгоритм диагностики является черным ящиком, поэтому мы не можем помещать в него какой-либо код. Благодаря!
С тех пор, как я * очень хорошо разбираюсь в программировании потоков, есть вероятность, что я неправильно понимаю вещи. Однако приведенный вами пример скорее всего является плохим выбором в словах. Если у меня есть нить A и нить B, я бы ожидал, что ОС будет быстро переключаться между A и B, чтобы пользователь GUI в потоке A обнаружил, что A всегда включен. В моем случае кажется, что ОС разрешает поток B работать в течение 2 секунд, прежде чем переключиться обратно в поток A. Почему это должно быть? (Также скажите мне, если я все еще запутался в какой-то проблеме с потоками.) – JnBrymn
Темы не будут блокироваться. Ваша ОС не должна допускать этого. Однако для определения фактического времени, затраченного в каждом потоке, должно быть возможно использовать профилировщик. – rlbond
Я никогда не использовал профилировщик. Любые рекомендации? Моя IDE - это Eclipse CDT, и я использую цепочку инструментов gnu (gcc, g ++, make, gdb). – JnBrymn