rishatss
@rishatss
Simple Developer ^)

Как решить проблему с циклом?

Добрый день/вечер господа :)
Снова я тут со своим быдло кодом пришел :(

Ну вообщем дело тут такое:
Имеется форма которая юзает маршурт GET методом.
А в маршруте метод который вызывает метод который принимает аргумент true или false.
Всего 4 кнопки и каждая кнопка вызывает разные методы. Которые вызывают другие методы с передачей аргумента, так как выше написал, true и false.

Но проблема такая:
Как только метод получает true, и потом получает false. Цикл еще работает определенное время и только потом останавливается.
Цикл работает от аргумента метода, true - работает - false - останавливается.

Привел видео, где визуально показал как все работает и где проблема:
https://www.youtube.com/watch?v=zd4sCmCk6dg&featur...

Исходники:
Контроллер
Роуты
Вьюха
  • Вопрос задан
  • 218 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
false не передается в тот метод, который вы хотите остановить. Ваш запрос stopvirtuallive запускается в отдельном потоке, а бесконечный while(true) продолжает работать пока не умрет по тайм лимиту.

И, кстати, можно было этот вопрос и текстом задать, а то у вас в тексте написано "у меня сейчас вот так" но не написано что вы пытаетесь сделать.

Есть несколько способов решения проблемы. Например запоминать id процесса, и убивать его когда нужно.
Или добавить какую-то внешнюю переменную (в базе, в файле, какой-то семафор) и проверять ее внутри вашего бесконечного цикла.

А про gearman вам уже писали, ага.
Ответ написан
Ahen
@Ahen
Универсальный дилетант
В общем, вот вам решение на основе комментария пользователя Stalker_RED о том, что у вас каждый раз создается отдельный экземпляр контроллера и Вы НИКАК не можете через него передать параметр false.

Создаем табличку в бд с этими параметрами, структуру сами придумаете, при старте вашей рождаемости запускаем цикл и один раз в базу пишем единичку, далее в цикле проверяем единичка ли в нашей базе. По останову рождаемости ставим в базу НОЛИК и цикл останавливается (если же цикл и правда не умер своей смертью, из-за максимального времени выполнения).

Но это что-то ужасное, обычно же в js пишется цикл и он просто обращается к контроллеру который каждый раз выполняет действие на стороне сервера. При этом можно точно так-же писать время, когда у нас последний раз было выполнено действие и не позволять ему произойти, если прошло подозрительно мало времени (ну защита от читеров).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы