Hebang
(usa Arch Linux)
Enviado em 06/05/2011 - 11:04h
Ola!
Precisei fazer isso no trabalho há um tempo atrás e implementei o meu próprio. Não foi dificil, diga-se de passagem.
O que fiz foi ordenar um vetor de tarefas agendadas. Ordenei do menor deadline até o maior, e dava um sleep no deadline da primeira tarefa da fila. Após executar ela, atualizo os deadlines, reordeno a fila e novo sleep. Coloca isso em um loop infinito e tem um agendador :)
Por exemplo:
Tarefa 1: executar daqui a 30 segundos
Tarefa 2: executar daqui a 15 segundos
Tarefa 3: executar daqui a 5 minutos
Ordenando o array:
[0] = Tarefa 2
[1] = Tarefa 1
[2] = Tarefa 3
O sleep sera o do deadline da tarefa que ocupa a posicao zero. Ou seja, 15 segundos.
Espero ter ajudado!