我喜欢做一个"后台计时器"但我不知道怎么做。主要的事情:我有if,如果我进去,我想设置时间,并启动一个计时器($ido = $split[0]*60*60 + $split[1]*60 + $split[2]; sleep($ido);)
,并在此计时器结束后,我喜欢运行一个函数($jatek->epuletkesz();)
但是,之后如果,我还有其他的东西,如果我开始睡眠,页面加载就会停止,因为等待睡眠结束。但我喜欢,睡眠进入"背景"并且不要停止页面内容,只有一个函数在睡眠结束后运行。
(抱歉英语不好,我希望你能理解我的问题。)
以下是代码:
if(empty($üzi)) {
echo "<script type='text/javascript'>alert('Sikeres fejlesztés!');</script>";
$nyers = $jatek->kovnyers($epulet);
$split = explode(":", $nyers['epetesiido']);
$ido = $split[0]*60*60 + $split[1]*60 + $split[2];
sleep($ido);
$jatek->epuletkesz();
//header( 'Location: ../views/jatek.php' );
}
答案 0 :(得分:0)
一个可能的解决方案是你在不同背景的css中生成一些类。像这样:
.background1 {
background: url('../img/img1.jpg');
}
.background2 {
background: url('../img/img1.jpg');
}
在javascript中,您需要一个更改背景的功能,如:
/**
* elem jquery elemnt to update
* background class to add
*/
var updateBackground = function(background, elem) {
var bck_list = ['background1', 'background2'];
elem.addClass(active);
jQuery.each(bck_list, function( index, value ) {
if (value !== active) {
elem.removeClass(value);
} else {
var next_index = index + 1;
}
});
// check if the next background exists
if (bck_list[next_index] === undefined) {
next_index = 0;
}
setTimeout(function(){ updateBackground(bck_list[next_index], elem); }, 30000);
}
最后一个计时器:
setTimeout(function(){ updateBackground("background1", $('#elem_to_update')); }, 30000);
答案 1 :(得分:0)
由于PHP不支持线程,你需要以某种方式模拟它,在这种情况下,只需使用CURL并将代码逻辑分解为2部分:worker&amp;主持人
演示者:
if( empty($üzi) ) {
echo "<script type='text/javascript'>alert('Sikeres fejlesztés!');</script>";
// the magic from here:
$request = "URL_OF_YOUR_WORKER";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_exec($ch);
curl_close($ch);
}
工人:
// some preparation
set_time_limit(0);
ignore_user_abort(TRUE); // this help to not terminate your worker
// Your logic continue here...
$nyers = $jatek->kovnyers($epulet);
$split = explode(":", $nyers['epetesiido']);
$ido = $split[0]*60*60 + $split[1]*60 + $split[2];
sleep($ido);
$jatek->epuletkesz();
正如您所看到的,演示者使用CURL来呼叫工作人员为他做一些事情,因为CURL的超时几乎是立即的,您的演示者只是请求并逃跑以响应用户,让工作人员在后台运行。 / p>
对于工作人员,我们使用ignore_user_abort
语句来防止您的工作人员即使呼叫者逃跑也会停止工作。在那之后,做你想做的事情
希望它可以提供帮助