Utilizando timers no PHP-GTK
Boas pessoal
bom, estou aqui novamente para dar mais uma dica, e desta vez bem legal: Adicionando timers à uma aplicação. Um timer é uma função que fica sendo executada de tempo em tempo, sem "travar" o resto dela. Isso pode ser muito util quando se precisa enviar comandos de tempo em tempo, como o PING no protocolo IRC, ou verificar uma caixa de email de tempo em tempo, e muitas outras coisas.
O método que faz esta maravilha, é o timeout_add() da classe Gtk. Segue um exemplo de como utiliza-la:
// Função do timer
function timer1() {
print("ok\n");
return true;
}
// Adiciona o timer, com delay de 1 segundo
Gtk::timeout_add(1000, 'timer1');
// Cria o sinal ao destruir
$window->connect_simple('destroy', array('gtk', 'main_quit'));
// Inicia a aplicação
$window->show_all();
Gtk::main();
Podemos remover um timer utilizando o método timeout_remove():
$button = new GtkButton('Iniciar');
// Função do timer
function timer1() {
print("ok\n");
return true;
}
// Callback do click do botão
function buttonClick() {
global $timer1, $button;
// Verifica se o timer esta ativo
if($timer1 != NULL) {
// Remove o timer
Gtk::timeout_remove($timer1);
$timer1 = NULL;
$button->set_label('Iniciar');
} else {
// Adiciona o timer, com delay de 1 segundo
$timer1 = Gtk::timeout_add(1000, 'timer1');
$button->set_label('Parar');
}
}
// Cria o sinal ao destruir
$window->connect_simple('destroy', array('gtk', 'main_quit'));
$button->connect_simple('clicked', 'buttonClick');
// Inicia a aplicação
$window->add($button);
$window->show_all();
Gtk::main();
Bom pessoal, essa é uma das coisas que pouco se comenta, e que é muito util quando se precisa executar funções de tempo em tempo.
Até a proxima dica
Taí uma coisa útil!
Eu preciso fazer urgente um cronometro regressivo em tempo real. Queria saber se poderei fazer isso, em PHP-GTK.
Opa josé.
Então, pode sim, usa uma variavel global, e dentro da função do timer, vc incrementa +1 (segundo)
< ?php $segundos = 0; function cro() { global $segundos; $segundos++; } $timer1 = Gtk::timeout_add(1000, 'cro'); ?>Assim, vc sempre terá a variavel $segundos com o tempo de execução do seu aplicativo