Re[16]: Progress Bar в отдельном потоке
От: MartinIden  
Дата: 14.07.09 11:28
Оценка:
Здравствуйте, Кодт, Вы писали:

К>>Видимо, придётся написать правильную программу самому

К>>Щас накидаю каркас.

К>http://files.rsdn.ru/4783/HardWorker.zip — VC2005


здравствуйте уважаемый Кодт.
спасибо вам в очередной раз за нагладный пример, который продемонстрировали.
но есть маленькая заковырка в вашем коде, как мне показалось, которая заключается вследующем:
вы запускаете много потоков, и каждый последующий запускаете по таймеру.
а теперь давайте представим себе, что вы пытаетесь запустить след. поток когда предыдущий еще не закончился, а окончание предыдущего потока обязательно надождать, чтобы запустить следующий.
что тогда вы в этом случае препримете?

P.S : ваш код буду по возможности теперь использовать в свои след. за задачах. очень наглядный.
Re[17]: Progress Bar в отдельном потоке
От: Кодт Россия  
Дата: 14.07.09 13:53
Оценка: 1 (1)
Здравствуйте, MartinIden, Вы писали:

MI>здравствуйте уважаемый Кодт.

(можно на ты)

MI>спасибо вам в очередной раз за нагладный пример, который продемонстрировали.

MI>но есть маленькая заковырка в вашем коде, как мне показалось, которая заключается вследующем:
MI>вы запускаете много потоков, и каждый последующий запускаете по таймеру.
MI>а теперь давайте представим себе, что вы пытаетесь запустить след. поток когда предыдущий еще не закончился, а окончание предыдущего потока обязательно надождать, чтобы запустить следующий.
MI>что тогда вы в этом случае препримете?

Тут есть 4 разных сюжета.

1) Слесарь-многостаночник.
Можно сразу заточиться на множество рабочих потоков. Тогда нам, в общем-то, без разницы, сколько их будет в каждый момент времени — ноль, один, много... Хотя ноль — это особый случай, у нас контролы по-другому покажутся.

2) Fire-n-forget, или выкрасил-и-выбросил.
Как только рабочий поток дал отмашку "я всё сделал", мы про него забываем. То, что он дальше будет делать (самоуничтожаться потихоньку) — нас не касается.

3) Подождать разумное время, а затем см. п.2.
Предположительно, после отмашки "я всё сделал" поток не должен выполнять какие-то длительные операции. Дадим ему шанс — прямо в UI-потоке, в обработчике этой отмашки, сделаем WaitForSingleObject(hTheWorkerThread,500) — если за полсекунды не перешёл в сигнальное состояние, то и чёрт с ним.

4) Вечный слуга.
Не надо убивать-запускать поток каждый раз.
Поток крутит бесконечный цикл: ждёт работу — долго работает — снова ждёт...
Тогда всё, что нам надо — это организовать очередь заявок. UI накидывает заявки в очередь, поток их вытягивает в своём темпе. Кончились заявки — переходит в режим ожидания.
... << RSDN@Home 1.2.0 alpha 4 rev. 1207>>
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.