Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058

Что лучше - задать ожидание для нескольких потоков или выполнять их, постоянно проверяя время

09.11.2012, 12:02. Показов 1502. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Практический вопрос: есть класс, в котором экземпляры создают кучу информации в том числе запоминают путь к программам. Также есть дата, когда нужно запускать эти программы. Что лучше: создавать потоки для каждой программы (в смысле открыть поток и поставить Thread.sleep на нужное кол-во времени), либо создать один поток, который будет с определенной задержкой (дабы не нагружать процессор) сверять пришло ли время запуска программы и вызывать программу. Как вы считаете?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.11.2012, 12:02
Ответы с готовыми решениями:

Выполнять функцию, при изменение размеров экрана. Или постоянно выполнять функцию
Доброго временисуток, есть функция, которую надо выполнять при при изменение размеров экрана или постоянно выполнять эту функцию. ...

Можно ли выполнять параллельно запись с нескольких потоков в ConcurrentQueue?
Всем добрый день. Подскажите пожалуйста, можно ли выполнять параллельно запись с нескольких потоков в ConcurrentQueue. Написал код простой...

Зимнее или летнее время? Что лучше?
Законопроект о возврате зимнего времени внесен в Госдуму. Переход на "зимнее" и "летнее" время был отменен летом 2011...

11
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
09.11.2012, 12:09
житейские соображения подсказывают, что много потоков, которые 90% времени спят - это совсем не есть хорошо ... если память не изменяет, запущенный поток сразу отхватывает мегабайт оперативной памяти и никому её не отдает, независимо, делает он чего-нибудь или нет
0
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
09.11.2012, 12:26
зачем мудрить, есть готовый механизм
http://msdn.microsoft.com/ru-r... timer.aspx
Цитата Сообщение от jivot Посмотреть сообщение
если память не изменяет, запущенный поток сразу отхватывает мегабайт оперативной памяти и никому её не отдает
просто интересно, как Вы это высчитывали)
0
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
09.11.2012, 12:28
Цитата Сообщение от andrew_w2k Посмотреть сообщение
просто интересно, как Вы это высчитывали)
сам не считал, но где-то читал
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
09.11.2012, 12:30
не совсем ясна мысль:
из примера с кучей потоков следует, что вы ЗНАЕТЕ через сколько времени вам требуется запустить каждую из программ (вы же в Sleep это пишете)
т.е. есть данные вида:
программа 1 - через 1с
программа 2 - через 2с
программа 3 - через 5с
и т.д.
если у вас есть эти данные что мешает сделать в одном потоке (в том, в котором вы хотите делать множество проверок) sleep на минимальное время, запустить программу, вычесть из времени остальных время Sleep'а, повторить, т.е. с данными выше:
Sleep(1000);
программа 1 - запуск не требуется
программа 2 - через 2-1=1с
программа 3 - через 5-1=4с и т.д.
если у вас НЕТ данных о том через какое время необходимо запускать программы, то чем вам поможет куча потоков которые точно так же будут делать каждый свою проверку?
0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
09.11.2012, 12:38  [ТС]
Цитата Сообщение от Tessen Посмотреть сообщение
если у вас есть эти данные что мешает сделать в одном потоке (в том, в котором вы хотите делать множество проверок) sleep на минимальное время, запустить программу, вычесть из времени остальных время Sleep'а, повторить,
Ну я примерно так и сделал. Только не разницу в слипах, а просто каждые 300 мили секунд сравниваю совпадение дат.
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
09.11.2012, 12:49
я понял как вы сделали, не понятно зачем постоянные проверки если уже есть данные через сколько что запускать...
0
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
09.11.2012, 12:51
время запуска дочерних программ видимо задано по календарной дате, а не в виде задержки от запуска основного приложения
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
09.11.2012, 12:54
тогда почему отдельные потоки знают сколько им ожидать?
Цитата Сообщение от titans2011 Посмотреть сообщение
Что лучше: создавать потоки для каждой программы (в смысле открыть поток и поставить Thread.sleep на нужное кол-во времени)
или по вашему вопрос был что лучше 1 поток с кучей проверок или куча потоков каждый из которых будет то спать то проверять свою дату? ну тогда это как то даже не смешно
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.11.2012, 12:58
titans2011, для таких целей лучше всего использовать таймер - он и поток отжирать не будет (а поток - это весьма дорогой ресурс) и тикать относительно вовремя (если нужна высокая точность, то можно использовать мультимедийный таймер).
Создайте отсортированный по дате выполнения список задач, при старте доставайте первую задачу, высчитывайте разницу между текущим временем и датой выполнения и ставьте таймер на этот промежуток. Когда таймер тикнет - запускайте задачу, потом считывайте следующую по списку, высчитывайте промежуток, ставьте таймер и все по кругу.
0
09.11.2012, 12:58

Не по теме:

Цитата Сообщение от Tessen Посмотреть сообщение
или по вашему вопрос был что лучше 1 поток с кучей проверок или куча потоков каждый из которых будет то спать то проверять свою дату?
по-моему именно так:) .... но наверно не стоит играть в экстрасенсов:)

0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
09.11.2012, 13:34  [ТС]
Цитата Сообщение от Tessen Посмотреть сообщение
тогда почему отдельные потоки знают сколько им ожидать?

или по вашему вопрос был что лучше 1 поток с кучей проверок или куча потоков каждый из которых будет то спать то проверять свою дату? ну тогда это как то даже не смешно
Ну почему не смешно. Именно это я и спрашивал. Только не потоки а таймеры созданные программно, где задержка является как раз разница между календарным заданным числом и current date. Но на мой взгляд один таймер с проверкой лучше, т.к. задания могут добавляться и очень много.(Это я про то, что высчитывать одним таймером разницу до следующей задачи). И один таймер (который работает от задания к заданию) просто физически не сможет запустить столько программ в одну скажем миллисекунду. А если таймер проверяет дату. Он видит, что ага, дата истекла, а программа не была запущенна. Т.е. некая такая асинхронная проверка без жесткой привязки ко времени.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.11.2012, 13:34
Помогаю со студенческими работами здесь

Глобальные и локальные переменные: что лучше (или что для чего и в чем конкретная разница)?
Что лучше (или как надо (или что для чего и в чем конкретная разница)): 1. // объявление в глобальной области видимости ...

Экран смерти во время запуска проверки антивируса или просто во время открытия нескольких программ
Прикрепляю отчеты от windows и aida64 в архиве

Как для нескольких компонентов выполнять одно событие
Вообще суть такая: На форме есть 5 кнопок. Я на одну кнопку реализовал код, чтобы когда наводишь курсор на Button он сам в течении 3 сек....

Что лучше для школьников PascalABC.NET или C++
Ну начнем с того я программирую на С++ Pascal не знаю но мой друг твердит, что код Pascal читабельнее, говорит что за 4 строки можно...

Что лучше для написания графического интерфейса: C++ или C#?
Здравствуйте! Ребят подскажите пожалуйста. Я новичек в программировании, сначала писал консольные приложения, сейчас перешел на оконные....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru