Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Заблокирован

Вечный цикл

22.12.2024, 21:06. Показов 1585. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать вечный цикл, который будет перебирать вечно. Но переходить к последующему циклу, только через 1 сек.
И как его оставить?

Если запустить цикл, допустим пользователь открыл страницу или отправил запрос ajax, инициализировался цикл.

Если пользователь закроет странице, выполнение цикла прекратиться или будет висеть в памяти. Как это проверить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2024, 21:06
Ответы с готовыми решениями:

Вечный онлайн в соцсети SHOWBIZA.NET
Ребята, подскажите мне плиз, что я сделал не так... Есть портал showbiza.net логин туда происходит через /login путем отправки пост...

Вечный цикл
является ли этот цикл зацикленным(вечным)? while(1){ for(i=8;i<=190;i++){ if (GetAsyncKeyState(i) == -32767)...

Вечный цикл
вы в вечном цикле выводите число и спрашиваете у пользователя больше меньше или равно ( = > < ). Если пользователь отввечает равно...

13
Заблокирован
22.12.2024, 22:13
Цитата Сообщение от Dmit199 Посмотреть сообщение
Если пользователь закроет странице, выполнение цикла прекратиться или будет висеть в памяти. Как это проверить?
Проверить элементарно. В цикле создаешь новые файлы в папке. Увидишь, что даже после закрытия страницы файлы будут продолжать создаваться
PHP
1
2
3
4
5
6
$count=0;
while (true){ //вечный цикл
 ++$count;
 #if(file_exists('./temp/'.$count.'.txt')) unlink('./temp/'.$count.'.txt'); //это потом для удаления
   file_put_contents('./temp/'.$count.'.txt', 'ку-ку' );
}
0
Эксперт PHP
 Аватар для liris
4361 / 1004 / 150
Регистрация: 16.01.2023
Сообщений: 2,486
22.12.2024, 22:13
Цитата Сообщение от Dmit199 Посмотреть сообщение
Как сделать вечный цикл, который будет перебирать вечно.
PHP
1
2
3
while (true) {
    // ...
}
Цитата Сообщение от Dmit199 Посмотреть сообщение
Но переходить к последующему циклу, только через 1 сек.
Компьютер так не умеет. Ему нужно чем-то заниматься эту секунду. Например поспать:

PHP
1
sleep(1);
Цитата Сообщение от Dmit199 Посмотреть сообщение
Если пользователь закроет странице, выполнение цикла прекратиться или будет висеть в памяти.
Пользователь не получит ответа, пока скрипт не завершит свою работу полностью. Если цикл будет висеть бесконечно долго - пользователь не получит ответа никогда. Скрипт будет висеть в памяти, пока его не прибьют по таймауту. Если принудительно отключить таймаут - скрипт будет висеть "вечно".

Сколько раз пользователь обратится к скрипту - столько копий скрипта у вас будет висеть "вечно" (рано или поздно воркеры закончатся и ваш сайт перестанет отвечать на запросы).
1
 Аватар для sad67man
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,812
22.12.2024, 22:40
Dmit199, Что значит "переходить к последующему циклу"? Наверное имеется в виду к следующей итерации цикла?

PHP
1
2
3
4
while(true) {
    sleep(1);
    //...
}
Цитата Сообщение от Dmit199 Посмотреть сообщение
Если пользователь закроет странице, выполнение цикла прекратиться или будет висеть в памяти. Как это проверить?
Клиент (браузер) делает запрос - на сервере выполняется скрипт и отдает ответ. Если вы в этот момент запустите бесконечный цикл, то браузер просто не должется ответа и выдаст 504 ошибку, скрипт останется висеть. Надо следить, чтоб не положить хостинг из-за кучи зависших процессов с бесконечными циклами.

Цитата Сообщение от Dmit199 Посмотреть сообщение
Если запустить цикл, допустим пользователь открыл страницу или отправил запрос ajax, инициализировался цикл.
Нужно понять для чего это все нужно? есть разные варианты. Можно организовать очередь - ее запускают отдельным процессом (можно по крону или другими способами), который к примеру каждую секунду делает запрос в БД - смотрит определенную таблицу.
Во время пользовательского запроса делаете запись в эту таблицу - пользователю отдается ответ, а фоновый процесс считает эту запись и запустит определенную команду на выполнение.
1
Заблокирован
22.12.2024, 22:47  [ТС]
Цитата Сообщение от liris Посмотреть сообщение
Скрипт будет висеть в памяти, пока его не прибьют по таймауту. Если принудительно отключить таймаут - скрипт будет висеть "вечно".
Для того чтобы остановить, достаточно в цикле прописать break?
Если цикл будет висеть, что за параметр в php, в котором указан тот самый тайм. По истечению которого, php остановиться...
0
Заблокирован
22.12.2024, 22:50
Что то никто не упомянул о самом простом варианте, который будет работать. sleep() в пыхе работать не будет.
Надо устанавливать в js setInterval и по этому таймеру отправлять запросы на сервер. Думаю, что ТС так и сделает.
1
 Аватар для sad67man
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,812
22.12.2024, 23:22
Цитата Сообщение от Dmit199 Посмотреть сообщение
Для того чтобы остановить, достаточно в цикле прописать break?
Долгоиграющие скрипы как правило по http не запускают. В консольном php нет ограничений по времени. Слишком мало информации, чтоб что-либо советовать. Вы бы сказали что хотите сделать?
1
Заблокирован
23.12.2024, 00:08  [ТС]
Необходимо ajax запустить ffmpeg, который вытащит 50 кадров из видео.
Продолжительность разная, процесс может занять до 1-2ч....

Необходимо не обновляя страницу, смотреть в каталог если изображение с номером таким та есть. Отдаем js код, который вставит в энный элемент текущую ссылку.

Через js пробовал, как то не надежно, отправлять по 5-10 запросов п пару секнд.
Продолжительность разная, чем интервал между запросами ниже тем лучше...

Хочу попробовать так, ajax отправляем запрос на сервер, в php запускаем цикл с интервалом, как только в каталоге появилось изображение, отдаем его url и по новой вызываем ajax, передаем туда следующий номер изображения и опять цикл, нашли, отдали url на второе изображение....

Вроде это куда лучше чем по 5-10 запросов в 1-2с отправлять, грузить пользовательский браузер. Тут же еще запросы возможно закэширует браузер, не надежно...
0
Эксперт PHP
 Аватар для liris
4361 / 1004 / 150
Регистрация: 16.01.2023
Сообщений: 2,486
23.12.2024, 09:44
Цитата Сообщение от Dmit199 Посмотреть сообщение
Необходимо ajax запустить ffmpeg, который вытащит 50 кадров из видео.
Продолжительность разная, процесс может занять до 1-2ч....
Я бы не делал это одним скриптом. Навскидку - один скрипт, который в фоне умеет вытаскивать кадры из видео.
Один скрипт (ну или класс, не суть), который умеет общаться с клиентом и выполнять задачу диспетчера (принимает запрос на задачу от клиента, проверяет статус ее выполнения, сообщает о завершении задачи).
Возможно, потребуется реализация очереди, если будет потребность у клиента в обработке нескольких видео. Или клиентов (они могут и не знать друг о друге).

Вряд ли пользователь захочет два часа сидеть с открытой вкладкой браузера, ожидая когда скрипт закончит думать.
0
Заблокирован
23.12.2024, 13:48  [ТС]
Хотелось бы понять. Как намеренно сделать так, чтобы связь с браузером и запущенным циклом в php, оборвалась и при это цикл продолжил работать...

Если такие ситуации возможны, есть ли возможность привязать цикл за пользователем. В случаи если пользователь вновь отправит запрос на запуск цикла, а предыдущий цикл все еще работает...

Как привязать и принудительно завершить ранее запущенные циклы, определенного пользователя.
0
Заблокирован
23.12.2024, 14:08
Цитата Сообщение от Dmit199 Посмотреть сообщение
Если такие ситуации возможны, есть ли возможность привязать цикл за пользователем.
Устанавливать пользователю сессию на время работы цикла. Или куку. Бесконечный цикл делать не стоит. Сайт будет висеть. Если надо вытянуть 50 кадров - значит сделать 50 запросов. Можно после каждого запроса отображать на странице сделанный кадр. Пока кол-во не достигнет 50. Если чел покинул страницу - значит всё... больше продолжать не имеет смысла. Даже не так. Если закрыл страницу, а не покинул. Потому что он может перейти на другую вкладку браузера, а создание кадров будет продолжаться.
Цитата Сообщение от Dmit199 Посмотреть сообщение
чтобы связь с браузером и запущенным циклом в php, оборвалась и при это цикл продолжил работать...
Не надо так делать. Я так понимаю, что эти картинки хочешь делать для посетителей / пользователей? Если ему не надо - зачем оставлять работающий цикл? Сайт можно подвесить на раз и два. Я в этом кое-что знаю
0
 Аватар для sad67man
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,812
23.12.2024, 14:50
Цитата Сообщение от Dmit199 Посмотреть сообщение
Хотелось бы понять. Как намеренно сделать так, чтобы связь с браузером и запущенным циклом в php, оборвалась и при это цикл продолжил работать...
С браузером вы общаетесь по протоколу http, который работает в формате запрос-ответ. Не нужно запускать цикл напрямую в обработке запроса.

Я бы создал какую-нибудь таблицу с видео и статусом. И пустил бы обработку по крону.
0
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
31.01.2025, 20:01
Паузу в цикле можно и без sleep сделать:

PHP
1
2
3
4
5
6
7
8
9
<?php
$var = time()+1;
while(1) {
 
if (time() == $var) {
echo "Это должно появиться через 1 секунду";
        }
}
?>
Но смысл чуток другой, так как цикл не засыпает.
0
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
01.02.2025, 10:44
Но можно сделать паузу только на основе самих циклов, опираясь на частоту проц-а. Для разных проц-ов, скорость будет разная по идее.

PHP
1
2
3
4
5
6
7
8
9
10
<?php
$z = 0;
while(1) {
 $z++;
            if ($z==20000000) {
        print "Это сообщение только после паузы";
        $z=0;
    }
}
?>
Но только так лучше не делать, но понимания должно добавить.

P.S. Новый виток/круг в цикле называется итерацией (от латинского iteratio — повторение).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.02.2025, 10:44
Помогаю со студенческими работами здесь

Вечный цикл и графика
Вообщем такая беда, я создал графику, на ней кнопки, вызываем в main нашу графику guiWindow-&gt;show(); а на графике кнопки, которые по...

Непонятно почему вечный цикл
Собственно дело вот в чём, если в мейне ввести не цифру, а букву (cin&gt;&gt;k), то цикл резко ломается к чертям, просто вечно выводит сообщения,...

ffprobe выдает вечный цикл
Скажите почему команда: ffprobe -i &quot;Мой фаил.mp4&quot; -show_streams выдает вечный цикл, см. скрин Как это исправить? Мне...

Как сделать вечный цикл?
Всем привет . Я хочу сделать некий замкнутый круг который будет всё время выполнения программы проверять код страницы и только если он...

Почему создается вечный цикл
def f(x): return (x ** 2 - 1) ** 2 def fp(x): return 4 * x * (x ** 2 - 1) def fpp(x): return 4 * (3 * x...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru