Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Telefon cu senzor compass BUN

Blocare google chrome cu master p...

sfat achizitie telefon pana in 20...

Stoc Smart CAM TV
 Ce corzi de chitara sa cumpar?

Galaxy A54 compass defect?

Cum conectez un switch WIFI la 60...

Cumparare AC Gree [Buget maxim 30...
 Telekom

Ce e aratarea asta ?

Probleme timonerie schimbator sau...

Numar strada gresit in contractul...
 Centrala Ariston Cares Premium 24...

La multi ani @Klasse!

La multi ani @shmecherul!

pareri ipad 6-2018- flip
 

Break, While, Loop intrebare PHP

- - - - -
  • Please log in to reply
17 replies to this topic

#1
marius019

marius019

    Junior Member

  • Grup: Members
  • Posts: 54
  • Înscris: 07.03.2012
Bună ziua,
Am un cod care se repetă de 10 ori utilizând while-do şi care generează 3 numere diferite din 5 în 5 secunde fiecare număr, utilizând sleep(5).
Eu vreau să pun o pauză de 60 secunde între fiecare dintre cele 10 repetări. De exemplu după ce s-au generat cele 3 numere, sistemul o va lua de la capăt cu alte 3 numere, eu vreau ca înainte să o ia de la capăt , să pună o pauză repetării de 60 secunde apoi să înceapă iar afişarea numerelor.
Am încercat cu Break însă îmi opreşte dfinitiv sistemul, şi nu o mai ia de la capăt.
Pentru acest sistem folosesc următorul cod:
$i= 1;
do{
				 $one = mt_rand(1, 99);
				 $two = mt_rand(1, 99);
				 $three = mt_rand(1, 99);
				 $this->SendMessage( 'Numar: '.$one.'' );
				 sleep(5);
				 $this->sendMessage( 'Numar: '.$two.'' );
				 sleep(5);
				 $this->sendMessage( 'Numar: '.$three.'' );
				 sleep(5);
				 $this->SendMessage( 'Cele trei numere au fost afisate, urmatoarele 3 vor fi afisate in 60 de secunde.' );
$i++;
}
while ($i<10);

După ce afişează ultimul mesaj aş vrea ca repetarea să fie oprită timp de 60 secunde, iar după cele 60 secunde să înceapă iar.
Menţionez că nu vreau să folosec funcţia sleep pentru această pauză de 60 secunde, deoarece vreau ca în aceste 60 de secunde sistemul să mai facă şi câte un update în baza de date, iar dacă folosesc sleep nu va mai putea face update-ul, pentru că din păcate aşa merge php atunci când folosim sleep..
Folosesc CLI TASK pentru a porni codul
Este posibil ceea ce vreau eu să fac?
Apreciez orice răspuns ajutător sau cel puţin cu referire la ceea ce vreau eu să fac. Mulţumesc.

Edited by marius019, 04 June 2015 - 12:38.


#2
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,948
  • Înscris: 03.08.2008
si de ce nu vrei sa folosesti sleep ?

#3
marius019

marius019

    Junior Member

  • Grup: Members
  • Posts: 54
  • Înscris: 07.03.2012
Deoarece vreau ca în acele 60 de secunde sistemul să mai facă şi câte un update în baza de date, iar dacă folosesc sleep nu va mai putea face update-ul, pentru că din păcate aşa merge php atunci când folosim sleep..

Menţionez ca atunci când pornesc acest cod folosesc CLI TASK

Edited by marius019, 04 June 2015 - 12:40.


#4
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,948
  • Înscris: 03.08.2008
pai si ce e asa complicat, iti pui un sleep, faci update urile sau invers, faci updateurile si pe urma pui sleep ul cu un minus de secunde in functie de cat dureaza update ul

#5
marius019

marius019

    Junior Member

  • Grup: Members
  • Posts: 54
  • Înscris: 07.03.2012

View Postyonut_a, on 04 iunie 2015 - 12:41, said:

pai si ce e asa complicat, iti pui un sleep, faci update urile sau invers, faci updateurile si pe urma pui sleep ul cu un minus de secunde in functie de cat dureaza update ul
Eu vreau să opresc repetarea timp de 60 secunde nu să pun o pauză între update şi repetare sau invers.
Vreau ca repetarea sa fie si oprita iar eu sa imi fac update-urile in acest timp in care este oprita.. e complicat ce zic, poate nu stiu eu exact cum sa explic.

Edited by marius019, 04 June 2015 - 12:52.


#6
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,948
  • Înscris: 03.08.2008
do {
//codul tau 

//update

//sleep(60- cat a durat update)
}while 


Nu vad de ce nu ar functiona, asta se intelege ca vrei sa faci

#7
marius019

marius019

    Junior Member

  • Grup: Members
  • Posts: 54
  • Înscris: 07.03.2012

View Postyonut_a, on 04 iunie 2015 - 12:50, said:

do {
//codul tau

//update

//sleep(60- cat a durat update)
}while


Nu vad de ce nu ar functiona, asta se intelege ca vrei sa faci

Sistemul vreau sa mearga in felul urmator:
AFISEZ NUMERELE -> OPRESC REPETAREA -> FAC UPDATE( sa zicem ca dureaza 30 secunde) -> MAI ASTEPT inca 30 secunde (pana la 60) -> PORNESC iar de la capat.    s.a.m.d

#8
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,948
  • Înscris: 03.08.2008
ce intelegi tu prin OPRESC REPETAREA ?

#9
marius019

marius019

    Junior Member

  • Grup: Members
  • Posts: 54
  • Înscris: 07.03.2012

View Postyonut_a, on 04 iunie 2015 - 12:57, said:

ce intelegi tu prin OPRESC REPETAREA ?
Scuză-mă dar nu am spus asta, update-urile nu se fac în acelaş cod în care afisez numerele şi repetările, update-ul se face într-un alt cod aflat în aceeaşi pagină dar mai sus, iar dacă eu pun sleep în cod-ul cu numerele se opresc toate acţiunile din acea pagină, de aceea vreau să opresc în alt fel nu cu sleep, pentru a putea face update-urile care se află în alt loc dar în aceeaşi pagină.

OPRESC REPETAREA = adica sa nu se mai repete acea afisare a celor 3 numere random timp de 60 de secunde.

Edited by marius019, 04 June 2015 - 12:59.


#10
RCG

RCG

    Senior Member

  • Grup: Senior Members
  • Posts: 2,386
  • Înscris: 20.09.2006
Ceea ce cauti tu se cheama in Javascript "setTimeout" si nu exista asa ceva in PHP din simplul motiv ca nu este event-based.

Ce poti face in schimb este urmatoarea chestie: din JS faci apel catre un script de PHP care iti returneaza numerele respective iar timeout-ul de 60 de secunde il faci in Javascript.

#11
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,948
  • Înscris: 03.08.2008
ce vrei tu nu se poate face secvential.

#12
marius019

marius019

    Junior Member

  • Grup: Members
  • Posts: 54
  • Înscris: 07.03.2012

View PostRCG, on 04 iunie 2015 - 12:58, said:

Ceea ce cauti tu se cheama in Javascript "setTimeout" si nu exista asa ceva in PHP din simplul motiv ca nu este event-based.

Ce poti face in schimb este urmatoarea chestie: din JS faci apel catre un script de PHP care iti returneaza numerele respective iar timeout-ul de 60 de secunde il faci in Javascript.
Dar daca folosesc BREAK; (care stiu ca opreste actiunea) pot face ca afisarea numerelor sa porneasca dupa 60 de secunde de la folosirea lui BREAK; ?

#13
RCG

RCG

    Senior Member

  • Grup: Senior Members
  • Posts: 2,386
  • Înscris: 20.09.2006
Intelege o chestie: PHP nu este bazat pe evenimente, ci secvential. Daca intrerupi thread-ul, il intrerupi de tot indiferent de ce ai face tu. Nu ai timere in PHP pentru ca, din nou, este secvential.

Un limbaj event-based este acela care iti permite sa faci salturi in cod fara sa intrerupi firul executiei si fara apeluri de functii.
Un limbaj secvential este acela care iti ruleaza codul step-by-step si nu trece la linia urmatoare pana ce actuala nu este "gata".

#14
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,948
  • Înscris: 03.08.2008
Nu poti, regandeste ti codul ca altfel nu iti va iesi decat prin paralelizare si te complici aiurea pentru nimic.

E foarte simplu sa iti introduci codul de update in cadrul loop ului tau si rezolvi problema

#15
mberila

mberila

    Active Member

  • Grup: Members
  • Posts: 1,668
  • Înscris: 20.11.2005
sau poți pune funcția ce îți generează cele 3 numere într-un fișier separat și pui un cronjob să-l lanseze în fiecare minut. cele 3 numere pot fi salvate într-un fișier text de unde vor fi preluate cu un js la fiecare 60 secunde

#16
RCG

RCG

    Senior Member

  • Grup: Senior Members
  • Posts: 2,386
  • Înscris: 20.09.2006
mberilla, si daca ai mai multi clienti carora vrei sa le oferi nr separate ce faci? Dar daca nu ai pe nimeni care sa fie activ in momentele respective de ce sa faci un cronjob inutil?

interval sau timeout in JS and that's about it.

#17
sergiu_spooky

sergiu_spooky

    Senior Member

  • Grup: Senior Members
  • Posts: 3,738
  • Înscris: 23.06.2006
Si daca nu exista JS ce faci? Pornesti un browser pe server? :) (sau treci pe NodeJS?)
Nu-i greu sa ai un cron job care citeste de undeva ce "task-uri" are de rulat. Si atunci poti avea cate un "task" pentru fiecare "client" care genereaza separat numere.
Nu-i greu nici sa ai un daemon PHP care face treaba asta, fara sa mai ai treaba cu cron, si atunci nu tot pornesti si opresti procese, ai unul pornit permanent.

Ce e important de inteles din toata povestea asta e ca intr-un singur proces PHP _nu_ poti face ce vrei tu.
Bucata care trebuie sa ruleze periodic o izolezi in procesul ei pe care il rulezi cat de des ai tu nevoie. Ori ca daemon pe Linux sau serviciu pe Windows ori cu ceva tool care sa-l ruleze, si anume cron pe Linux sau Scheduled Tasks pe Windows.

#18
RCG

RCG

    Senior Member

  • Grup: Senior Members
  • Posts: 2,386
  • Înscris: 20.09.2006
sergiu, eu sunt Javascriptist de fel :). Deci oricum eu mergeam pe NodeJS :).

Dar ca sa nu mai batem apa'n piua: omul zicea asa: "După ce afişează ultimul mesaj" ceea ce m-a facut sa cred ca ai un client si un browser.

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate