Простите за глупый вопрос, но не могли бы ва мне пиплы помочь. Я начинающий программист так что не ругайтесь сильно. Вобщем суть вопроса: Имеется диалоговое приложение, по нажатию кнопки Start запускается большой цикл надо по нажатию кнопки Stop его остановить.
Пожалуйста не обделите ответом
Здравствуйте, BIG_PILOT! Вы писали:
BP> Простите за глупый вопрос, но не могли бы ва мне пиплы помочь. Я
BP> начинающий программист так что не ругайтесь сильно. Вобщем суть
BP> вопроса: Имеется диалоговое приложение, по нажатию кнопки Start
BP> запускается большой цикл надо по нажатию кнопки Stop его остановить.
BP> Пожалуйста не обделите ответом
Запускай большой цикл в отдельной нити. В цикле время от времени проверяй флаг выхода. В MSDN есть примерчик про вычисления в отдельной нити.
Posted via RSDN NNTP Server 1.7 beta
Здравствуйте, BIG_PILOT, Вы писали:
BIG>Простите за глупый вопрос, но не могли бы ва мне пиплы помочь. Я начинающий программист так что не ругайтесь сильно. Вобщем суть вопроса: Имеется диалоговое приложение, по нажатию кнопки Start запускается большой цикл надо по нажатию кнопки Stop его остановить.
BIG>Пожалуйста не обделите ответом
Суть, видимо, такая:
— Создаешь глобальный флаг остановки BOOL bStop_Cycle
— Нажатие на Stop устанавливает bStop_Cycle = TRUE
— Цикл может выглядеть так:
bStop_Cycle = FALSE;
struct EXCEPTION_STOP { /* сюда можно дополнительную инфу о состоянии цикла в момент остановки запихнуть */ };
try {
while (...) {
...
if (bStop_Cycle) {
throw EXCEPTION_STOP(...);
}
...
}
}
catch (EXCEPTION_STOP & es) {
/* Откат сделанных в цикле действий, используя если нужно инфу из es */
}
— Не забыть сделать так, чтобы во время цикла кнопка Stop действовала! Т.е. обрабатывать сообщения (или поместить цикл в отдельный поток?)
Здравствуйте, BIG_PILOT, Вы писали:
BP>Простите за глупый вопрос, но не могли бы ва мне пиплы помочь. Я начинающий программист так что не ругайтесь сильно. Вобщем суть вопроса: Имеется диалоговое приложение, по нажатию кнопки Start запускается большой цикл надо по нажатию кнопки Stop его остановить.
BP>Пожалуйста не обделите ответом
Может лучше сделать , чтобы при нажатии на Start стартовал поток, а потом при нажатии на Stop его останавливать
Может не очень эффектное решение, но все такиююю

... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, BIG_PILOT, Вы писали:
BIG>Простите за глупый вопрос, но не могли бы ва мне пиплы помочь. Я начинающий программист так что не ругайтесь сильно. Вобщем суть вопроса: Имеется диалоговое приложение, по нажатию кнопки Start запускается большой цикл надо по нажатию кнопки Stop его остановить.
BIG>Пожалуйста не обделите ответом
Например так.
Вот ваш цикл, запускающийся по кнопке Start. Жирным выделено, то что нужно добавить.
OnStart()
{
m_bStop = FALSE;
MSG message;
for (int i = 0; (i < ...) && !m_bStop; i++)
{
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
// Здесь ваш код
}
}
OnStop()
{
m_bStop = TRUE;
}
Блок кода с PeekMessage можно вызывать не в каждом цикле, а скажем раз в 16-ть циклов, тогда просто добавьте еще одно условие ограничивающее периодичность.
Всем спасибо за участие. Не знаю что бы я без вас делал.