我們的業(yè)務(wù)是用戶配置一個(gè)時(shí)間間隔,定時(shí)的去發(fā)送視頻,圖片,文字,
每個(gè)視頻發(fā)送需要有個(gè)五秒的間隔,圖片文字也是的。而且要求先發(fā)視頻,再發(fā)圖,再發(fā)文字。
請(qǐng)問這種怎么實(shí)現(xiàn)?
我目前的實(shí)現(xiàn)是定時(shí)器嵌套,實(shí)現(xiàn)的效果不是很理想,經(jīng)常出現(xiàn)先發(fā)文字的情況 ,請(qǐng)問這樣起定時(shí)器能夠控制先發(fā)視頻圖片的順序嗎?
代碼如下:
if(!empty($content['vedio']) && $content['vedio']){
$vedio = $content['vedio'];
$i = 0;
$count = count($vedio);
$timer_id = Timer::add(8, function()use(&$timer_id ,&$fromId, &$toId, &$vedio, &$i ,&$count)
{
$this->sendVideo($fromId, $toId, $vedio[$i]);
$i++;
if($i >= $count){
Timer::del($timer_id);
}
});
}
//圖片
if(!empty($content['pic_urls']) && $content['pic_urls']){
$pic_urls = $content['pic_urls'];
$i = 0;
$count = count($pic_urls);
$p_timer_id = Timer::add(5, function()use(&$p_timer_id ,&$fromId, &$toId, &$pic_urls, &$i ,&$count)
{
$this->sendImage($fromId, $toId, $pic_urls[$i]);
$i++;
if($i >= $count){
Timer::del($p_timer_id);
}
});
}
//文字
if(!empty($content['content']) && $content['content']){
$text = $content['content'];
$i = 0;
$count = count($text);
$t_timer_id = Timer::add(3, function()use(&$t_timer_id ,&$fromId, &$toId, &$text, &$i ,&$count)
{
$this->sendText($fromId, $toId, $text[$i]);
$i++;
if($i >= $count){
Timer::del($t_timer_id);
}
});
}
按照你的代碼,進(jìn)程會(huì)先初始化三個(gè)定時(shí)器。視頻定時(shí)器(每8s執(zhí)行一次),圖片定時(shí)器(5s),文字定時(shí)器(3s),注意這三個(gè)定時(shí)器會(huì)在這段代碼執(zhí)行的時(shí)候一次都初始化,你可以通過打印每次的timer_id發(fā)現(xiàn),代碼執(zhí)行后三個(gè)定時(shí)器都是設(shè)置好了的。所以執(zhí)行順序就變成了3s后第一段文字,5s后第一張圖片,6s后第二段文字,8s后第一個(gè)視頻,9s后第三段文字,10s后第二張圖片。
所以分開設(shè)置定時(shí)器似乎是不能滿足需求的,可以把視頻+圖片+文字合起來作為一個(gè)組。每個(gè)定時(shí)器發(fā)送一組,這樣就有先后順序了。