yeahz Posted February 27, 2009 Report Share Posted February 27, 2009 Kā lai uzliek ka kaut kas noteikts iedarbosies ik pa 10 minūtēm? Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted February 27, 2009 Report Share Posted February 27, 2009 Unix vidē: crontab -e Windows vidē: Control panel -> Task scheduler Quote Link to comment Share on other sites More sharing options...
yeahz Posted February 27, 2009 Author Report Share Posted February 27, 2009 un ar tīru PHP to nevar panākt? Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted February 27, 2009 Report Share Posted February 27, 2009 Var, bet tikai tādam PHP, kas palaists ne caur Webserveri, jo no webservera palaistajam darbojas: http://lv.php.net/manual/en/info.configura...-execution-time while(true){ sleep(600); ... tavs skripts } Taču PHP nav īsti piemērota šādām lietām. Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 27, 2009 Report Share Posted February 27, 2009 (edited) yeahz --> prieks kam tev ar tiiru PHP ?? PHP ir taada lieta kaa skripta izpildes Maksimalais laiks, ja to uzliksi Maksimali lielu tad var panakt.. 1.Iceko tekoso laiku: 2. palaid muzzigo ciklu 3. parbaudi vai nav pagajjusas 10 minutes , ir: izpildi kadu darbiibu un nomaini laiku (tekoso) cikls turpinaas .. --- edit: Aleksejs jau pasteidzaas :) ahh.. biju piemirsis par sleep() :( Edited February 27, 2009 by Grey_Wolf Quote Link to comment Share on other sites More sharing options...
Kaklz Posted February 27, 2009 Report Share Posted February 27, 2009 Grey_Wolf: Ir gadījumi, kad laika limits ir vajadzīgs mazāks kā 10 minūtes, bet tajā pašā laikā tam fona procesam var vajadzēt vairāk laika nekā ir tas limits. Tb var gadīties tā, ka laižot skriptu ik pa minūtei ar crontab nākamā skripta instance tiek palaista pirms iepriekšējā ir paspējusi pabeigties un tad ir SLIKTI. Tad nu nekas cits neatliek kā rakstīt vai nu php vai sh skriptu ar sleep. Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 27, 2009 Report Share Posted February 27, 2009 Grey_Wolf: Ir gadījumi, kad laika limits ir vajadzīgs mazāks kā 10 minūtes, bet tajā pašā laikā tam fona procesam var vajadzēt vairāk laika nekā ir tas limits. Taa ir situacija kad kautkas tomer ar visu programmesanas logistiku ir aizgajis skersam , normalaa situacija nekad nevajadzetu buut taa ka proces jalaizj atkartoti pirms tas ir Reali beidzies ... tas jau sanak muzigais cikls --> kas savukar noziime ka nepareiza pieeja problemas risinasanai ... -- P.S. vel saprotu ka kautkas updeitojas ik pec 10 minutem. (un arii tad taa tikai ar lielu piespiesanos) Quote Link to comment Share on other sites More sharing options...
yeahz Posted February 27, 2009 Author Report Share Posted February 27, 2009 Ar to sleep nav tā kā biju domājis, es gribu panākt lai kad ieslēdz lapu, tur izvadās vēl palikušās sekundes līdz nākošajai atjaunošanās reizei, bet ar to sleep ir tā ka atverot lapu ir jāgaida kamēr tas noteiktais laiks paies. Vārdu sakot izstāstīšu visu ko gribu panākt, varbūt ir cita metode (ir noteikti, jo pats zinu lapu kurā ir tas, ko es gribu). Pieņemsim ka ir šādi cipari (tas ir defaultā un tad, ja ir šādi cipari, man nevajag lai atjaunojas ik pa noteiktajam laikam, lai vienkārši stāv kā ir): $cipars1 = 100; $cipars2 = 100; Un ja pieņemsim ka cipari ir šādi tagad (šādā gadījumā es gribu lai $cipars1 ik pa noteiktajam laikam atjaunojas +1, un kad cipars ir atjaunojies, tas atkal sāk atskaiti un atkal pieskaitās +1 līdz kamēr sasniedz otro ciparu): $cipars1 = 58; $cipars2 = 100; Un šim ciparam ir jāupdeitojas arī tad, kad lietotājs neskatās lapu (browseris ir izslēgts). Laikam izstāstīju visu ko gribēju panākt. Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 27, 2009 Report Share Posted February 27, 2009 kukiji + JS -- Lietotajam ieseto kukijos laiku (sakuma laiku) un palaizot lapu apskatas kads laiks ir un cik laiks palicis (servera pusee) , talak ar JS skaita laiku atpakalj , kad sasniedz 0 (nu vai arii pieskaitot no teikto vertiibu), tad vienkarshi parladee lapu .. Serveris atkal paskatiisies kaads laiks Bija Kkijos, izdariis kas jadara (palaidiis skriptu ... etc) un iesetos jaunu kukija laiku ... aptuveni sadi ... Quote Link to comment Share on other sites More sharing options...
Kaklz Posted February 27, 2009 Report Share Posted February 27, 2009 Ja nemaldos, tu taisi kaut kādu web spēli, kurā jāgaida līdz resursu atjaunošanās brīdim. Ja tā nav, tad tālāko vari nelasīt. To var darīt šādi - tu zini, cikos tev ir jāpalielina attiecīgais resurss par kādu vienību, tad nu to datu atjaunošanu veic php pusē bez jebkādiem background procesiem vai kā tamlīdzīga vienkārši pieglabājot resursa pieauguma tempu laika vienībās un pie nākamā pieprasījuma pārbaudot vai tas resurss nav jāpalielina. Teiksim man ir resurss nauda, kas pieaug par 10 latiem katru minūti. Es saglabāju lietotāja pašreizējo naudas daudzumu, pēdējo atjaunošanas laiku un pieauguma tempu: user | current_money | last_update | delta x | 100 | 2009-02-27 14:03:00 | 10 Tad kad tu ielādē lapu vienkārši paskaties par cik minūtēm atšķiras last_update laiks no pašreizējā laika un par tik reizēm palielini delta vērtību un pieskaiti current_money datiem, atjauno arī last_update laiku. Tas, ka lietotājs nav lapā neko nemaina - tiklīdz viņš ieradīsies, tu viņa datus pārrēķināsi. Ja tev vajag viņa datus gadījumā ja viņam kāds uzbrūk, tad pārrēķini tos arī tad. Quote Link to comment Share on other sites More sharing options...
yeahz Posted February 27, 2009 Author Report Share Posted February 27, 2009 Liels paldies Kaklz. Bet seko nākošā problēma, redz ka ja es visu laiku neesu online, tad neatjaunojās tā informācija kā vajadzētu, viņa atjaunosies tikai tad kad es ienākšu. Problēma ir tāda ka last_update jau stāvēs visu laiku uz vietas, ja lietotājs netiek aiztikts un kad es būšu ienācis pēc stundas, tad tikai tad man atjaunosies par to vienu vienību, jo last_update ir bijis visu laiku stāvējis uz vietas, viņš nav ticis atjaunots kamēr neesu bijis (kamēr pa stundu jau vajadzēja kopā pienākt 60 vienībām(ja reizi minūtē nak viena)). Quote Link to comment Share on other sites More sharing options...
bubu Posted February 27, 2009 Report Share Posted February 27, 2009 Nevajag par vienu vienību palielināt. Kaklz tev jau teica - palielini par tik, cik ir pagājis laiks. Citiem vārdiem skaidrojot - ja mašīna brauc 100 kilometrus stundā, un last_update ir 14:30, bet patreizējas laiks ir 16:00. Tad cik kilometrus mašīna ir nobraukusi? Tieši tas pats tev - resurss pieaug 100 Ls/h, last_update = 14:30, now = 16:00. Tagad lietotājam ir (16:00 - 14:30) * 100 = 1.5 * 100 = 150 Ls pieaagums šajā resursā. Kā redzi ne ja par vienu vienību palielinājās, bet atkarībā no laika. Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 27, 2009 Report Share Posted February 27, 2009 yeahz --> Kaklz tacku piemineja ka shis ir janjem veraa .. ja zinasi cik minutes pagajushas tad tachu vari pieskaitiit nevis 1 bet teiksim 60 ... Kur problemas?? Quote Link to comment Share on other sites More sharing options...
yeahz Posted February 27, 2009 Author Report Share Posted February 27, 2009 Paldies visiem, viss izdevās. :) Quote Link to comment Share on other sites More sharing options...
yeahz Posted February 27, 2009 Author Report Share Posted February 27, 2009 Atvainojos par dubultpostu. Vai ir kaut kāds veids kā neļaut tam skaitlim aiziet lielākam par otro skaitli? Es kaut ko šādu mēģināju sataisīt, sanāca, ja pats manuāli nomainīju laiku un tad pārbaudīju, bet nezin kāpēc nestrādā tad kad es ieeju pēc, piemēram, stundas laika un tur jau tas viss ir uzkrājies vairāk nekā vajadzētu un tiek pieskaitīts. $skaitlis1 = floor(($laiks - $r['last_update_health'])/60); if ($skaitlis1 > $r['health_max']) { $skaitlis = $r['health_max']-$r['health']; } else { $skaitlis = floor(($laiks - $r['last_update_health'])/60); } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.