Здравствуйте, Кодт, Вы писали:
К>>Видимо, придётся написать правильную программу самому
К>>Щас накидаю каркас.
К>http://files.rsdn.ru/4783/HardWorker.zip — VC2005
здравствуйте уважаемый Кодт.
спасибо вам в очередной раз за нагладный пример, который продемонстрировали.
но есть маленькая заковырка в вашем коде, как мне показалось, которая заключается вследующем:
вы запускаете много потоков, и каждый последующий запускаете по таймеру.
а теперь давайте представим себе, что вы пытаетесь запустить след. поток когда предыдущий еще не закончился, а окончание предыдущего потока обязательно надождать, чтобы запустить следующий.
что тогда вы в этом случае препримете?
P.S : ваш код буду по возможности теперь использовать в свои след. за задачах. очень наглядный.
Здравствуйте, 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>>