powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как связать потоковую функцию с таймером
25 сообщений из 62, страница 1 из 3
Как связать потоковую функцию с таймером
    #38318609
satch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу в VS 2010 на C++, MFC'шное dialog-based-приложение. Задача такая: по нажатию на кнопку создать 2 дополнительных потока (AfxBeginThread), и чтобы каждый поток, точнее функция потока, выполнялись по таймеру (SetTimer). Потоки то создаются, их функции работают, а как их заставить выполняться по таймерам?
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38318641
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satch,

- создай Event ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms682396(v=vs.85).aspx)
- блокируйся в потоках на созданном событии ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx)
- при срабатывании таймера устанавливай состояние таймера - это приведет с разблокировке потоков ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms686211(v=vs.85).aspx)
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38318726
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satchЗадача такая: по нажатию на кнопку создать 2 дополнительных потока
(AfxBeginThread), и чтобы каждый поток, точнее функция потока, выполнялись по таймеру
(SetTimer).
Какая-то внутренне противоречивая задача... Поток обычно создаётся чтобы работать. Надо по
таймеру - порождай поток в процедуре таймера (или по приходу WM_TIMER). Заранее порождать
потоки ни к чему.
Или, если потоки созданы сразу, то ни к чему уже таймер: они сами могут уснуть на нужное
время, а потом проснуться без всякого внешнего воздействия.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38318895
satch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovsatchЗадача такая: по нажатию на кнопку создать 2 дополнительных потока
(AfxBeginThread), и чтобы каждый поток, точнее функция потока, выполнялись по таймеру
(SetTimer).
Какая-то внутренне противоречивая задача... Поток обычно создаётся чтобы работать. Надо по
таймеру - порождай поток в процедуре таймера (или по приходу WM_TIMER). Заранее порождать
потоки ни к чему.
Или, если потоки созданы сразу, то ни к чему уже таймер: они сами могут уснуть на нужное
время, а потом проснуться без всякого внешнего воздействия.
Но если я поток создам в процедуре таймера OnTimer, то при каждом срабатывании таймера (например, раз в секунду) будет создаваться новый поток, правильно?
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38318963
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satchНо если я поток создам в процедуре таймера OnTimer, то при каждом срабатывании
таймера (например, раз в секунду) будет создаваться новый поток, правильно?

Правильно. Он создастся, сделает что надо и умрёт. Так живут потоки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38318999
satch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovsatchНо если я поток создам в процедуре таймера OnTimer, то при каждом срабатывании
таймера (например, раз в секунду) будет создаваться новый поток, правильно?

Правильно. Он создастся, сделает что надо и умрёт. Так живут потоки.
Не вы меня не поняли. Вот пример:
UINT ThreadWatcherEAF(LPVOID pParam)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
{
	MessageBeep(-1);
	return 0;
}
void CMyDlg::StartTimer(void)
{
	SetTimer(1, 1000, 0);
}
void CMyDlg::OnTimer(UINT_PTR nIDEvent)
{
	AfxBeginThread(*MyThread, NULL);

	 CDialogEx::OnTimer(nIDEvent);
}


То есть в данном примере раз в секунду будет создаваться новый поток, да? Например, запущу свое приложение на 10 секунд, и за это время наплодится 10 потоков?
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319018
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satchза это время наплодится 10 потоков?
Да. В чём проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319088
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Ну, например, в пуле потоков потоки живут иначе. Порой накладные расходы на создание потока столь высоки, по сравнению с заданиями которые они получают, что переходят на использование пулов потоков. Или же пулы потоков просто необходимы, когда требуется жесткий контроль над ресурсами. Вообщем, однозначного рецепта нет - "используй потоки так, и никак иначе", все зависит от задачи.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319124
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковПорой накладные расходы на создание потока столь высоки, по
сравнению с заданиями которые они получают, что переходят на использование пулов потоков.

Если задание такое мелкое, то его проще выполнить прямо в коде OnTimer.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319144
satch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovsatchза это время наплодится 10 потоков?
Да. В чём проблема-то?
Ну мне, как мне кажется, при создании потока выделяется память, а в данном случае я её бессмысленно расходую, ведь мне нужны не 10 потоков, а один.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319160
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satchНу мне, как мне кажется, при создании потока выделяется память, а в данном случае я её бессмысленно расходую, ведь мне нужны не 10 потоков, а один.Если один поток завершился до создания другого, то в чём проблема?
А если не завершился, то, может быть, вам, всё-таки, нужны десять потоков?
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319251
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satchмне нужны не 10 потоков, а один.
Потоки - средство, а не цель. Их нужно столько, сколько требует задача.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319276
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Их нужно столько, сколько их использование будет оправдано текущими аппаратными и программными ресурсами. Бездумное и неконтролируемое создание потоков путь в никуда.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319312
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковИх нужно столько, сколько их использование будет оправдано текущими аппаратными и программными ресурсами.На более-менее современном железе и операционках потоки можно создавать тысячами.
Поэтому потоков должно быть столько, сколько требуется в задаче.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319442
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Ну, удачи тебе с 1000 потоков требуемых для решения задачи на однопроцессорной системе.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319503
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков1000 потоков требуемых для решения задачи на однопроцессорной
системе.
Решать мегазадачи на железе с помойки - плохая привычка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319514
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да что тут обсуждать.
Посмотрите на условие задачи.
Юзер нажимает кнопку и после этого раз в несколько секунд запускается один поток.

Где вы тут тысячи потоков нашли? Какая разница какие тут расходы на создание потока?
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319525
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковНу, удачи тебе с 1000 потоков требуемых для решения задачи на однопроцессорной системе.В далёких нулевых был у меня дома компьютер, если правильно помню, AMD-что-то-там/300МГц/32Мб.
IBM OS/2 JDK 1.1.8 могла создать только 900 с небольшим потоков. Но не из-за ограничения системы, а из-за собственных проблем.
Так что даже для "железа с помойки" это не задача, а задачка.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319572
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satch,

-- я не понял, зачем при потоках ещё и таймер. Обычно он не нужен.
-- учти, что чтобы таймер имел возможность отработать, поток ОБЯЗАН обрабатывать оконные сообщения, (WM_xxx), в рабочих потоках это как правило не так.
-- если потоку надо периодически выполнять какую-то порцию работы, которую ему дает другой поток, то это делается не таймерами, а на event-ах. Отдающий поток кладет данные в какое-то гнездо, и входит event, означающий, что есть что поделать, рабочий поток спит нас этом event, просыпается, когда его ввели, берет из гнезда работу, делает ее и снова засыпает на event.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319576
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широковsatch,

- создай Event ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms682396(v=vs.85).aspx)
- блокируйся в потоках на созданном событии ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx)
- при срабатывании таймера устанавливай состояние таймера - это приведет с разблокировке потоков ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms686211(v=vs.85).aspx)

Ok все замечательно, только на фиг нужен таймер?
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319581
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovsatchНо если я поток создам в процедуре таймера OnTimer, то при каждом срабатывании
таймера (например, раз в секунду) будет создаваться новый поток, правильно?

Правильно. Он создастся, сделает что надо и умрёт. Так живут потоки.


Лучше так не делать, будет слишком много потоков.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319589
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyДа что тут обсуждать.
Посмотрите на условие задачи.
Юзер нажимает кнопку и после этого раз в несколько секунд запускается один поток.

Где вы тут тысячи потоков нашли? Какая разница какие тут расходы на создание потока?

Так смотря что он делать будет.
Может каждый про часу считает ...
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319810
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

В этом и состоит задача программиста - построить многопоточные вычисления так, чтобы они учитывали доступные программно-аппаратные ресурсы. С чем ты здесь конкретно не согласен? Или тебе до фанаря, на какой конфигурации у тебя запускается задача? Видать не все равно, раз ты заговорил о "ведре". Так значит все же многопотоковые вычисления это не столько "жадная" стратегия, а строгая дисциплина связанная с анализом доступным программно-аппаратных ресурсов.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319813
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Вообще, у меня был единственная мысль - ты, как программист, должен контролировать создание потоков при организации многопотоковых вычислений. Твоя стратегия, как программиста, должна учитывать доступные программно-аппаратные ресурсы. Если ты бесконтрольно позволяешь своим программам потреблять ресурсы, что можно сказать о надежности твоих программ - задосить их легче легкого. Хотя, что-то мне подказывает, в реальных программах ты и пулы используешь и не даешь бесконтрольно создаваться неограниченному количеству потоков.
...
Рейтинг: 0 / 0
Как связать потоковую функцию с таймером
    #38319854
satch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivsatch,

-- я не понял, зачем при потоках ещё и таймер. Обычно он не нужен.
-- учти, что чтобы таймер имел возможность отработать, поток ОБЯЗАН обрабатывать оконные сообщения, (WM_xxx), в рабочих потоках это как правило не так.
-- если потоку надо периодически выполнять какую-то порцию работы, которую ему дает другой поток, то это делается не таймерами, а на event-ах. Отдающий поток кладет данные в какое-то гнездо, и входит event, означающий, что есть что поделать, рабочий поток спит нас этом event, просыпается, когда его ввели, берет из гнезда работу, делает ее и снова засыпает на event.У меня задача состоит в том, что в программе нужно организовать (асинхронно) опрос 4-х удаленных экземпляров СУБД MySQL на наличие новых данных в таблице (обычный select count(*) from таблица), например, опрашивать все экземпляры с периодичностью 1 раз в 5 сек => выходит что оптимальный вариант - это отдельный поток (скорее всего рабочий, а не интерфейсный) под каждый экземпляр + таймер. А как по-другому?
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как связать потоковую функцию с таймером
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]