C/C++

C++ цикличный код

Попытался сделать код, в котором функция при активации имеет свойство быть цикличной. 1 дефект - после активации все работает как надо, но меню, через которое я активирую функцию, просто зависает и предлагает закрыть приложение.
Есть идеи, как мне задать цикличность этой функции иначе?
Если при выборе select = 10 нужно запустить цикл, а при повторном выборе 10 остановить - ваша метода не подходит, так как цикл останавливает выполнение основного кода.
Простой способ - цикл оформить в отдельном потоке, который захватывает переменную feature10 и управляется ей. Но раз вы полный дуб - у вас это не получится...
Для одного потока все еще сложнее - нужно писать таймеры. Sleep для этого не подойдет. В общем - миссия не выполнима.
Сергей Колосов
Сергей Колосов
51 417
Лучший ответ
вот из-за таких как вы и ругают goto
Валентин ****
Валентин ****
56 573
В какой момент по твоему мнению в бесконечном цикле ( с использованием безусловного перехода ) изменяется условие для выхода?

:test
....
goto test;
Emzari Narmania
Emzari Narmania
93 057
Возможно надо метку "test" поднять на строчку выше (если ты хочешь добиться эффекта "true->false", "false->true" при каждой итерации).
P.S.
1)Использование "goto" не для выхода из множественной вложенности, да и тем более верх по коду... уууу... чуваак
2) Скорее всего тебе надо использовать не "goto", а "for (;;)" или "while(1)"/"while(true)" для бесконечного цикла.
Андрей Андрей 3) Есть подозрения, что такая программа должна быть написана с ипользованием вызова "select" или ему аналогичным (то бишь там какой-то обработчик должен вызываться с таймаутом). Может я чего-то не улавливаю.
Сергей Громышев Я попробовал использовать for для бесконечного цикла, результат тот же. Проблема в том, что код ориентируется на конечную команду break, говоря точнее, пока он до этой команды не дойдет, приложение не отвиснет. Если попробовать break запихнуть выше, то цикл прекращает работу.
Сергей Громышев Не совсем понял что мне нужно сделать, я валенок в c++. Вот код:
case 10: // Switch
feature10 = !feature10;
if (feature10) { // Нужен цикл
hexPatches.Noclip.Modify();
usleep(1000000);
hexPatches.Noclip.Restore();
usleep(1000000); // этой функции
} else {
hexPatches.Noclip.Restore();
}
break;
}
Ваш код, который обеспечивает работу меню, выполняется в обработчике сообщений Windows. Вы не должны в этом обработчике выполнять длительные действия, тем более запускать бесконечный цикл -- интерфейс пользователя вполне ожидаемо зависнет.
Здесь 2 варианта:
-- либо использовать системные функции таймера, которые посылают специальное сообщение, обработку которого вы должны добавить (т. е. делать Modify или Restore по этим сообщениям);
-- либо запускать "мигание" в отдельном потоке (thread) (придется изучить, как их создавать). Тогда можно использовать и код наподобие вашего (хотя лучше без goto обойтись).
Халил !!!
Халил !!!
2 448
Программист растет
твой код уродливый, очевидно
Сергей Громышев А ты лучше вариант предложишь? (да? ну так покажи)