function singleThreadLoop() { $thread = new DummyThread(); while (true) { while (!($task = $this->TaskModel->getNextTask())) { // have a sleep for a second until we get more tasks (hopefully) sleep(1); } $id = $task['id']; $taskName = $task['task']; $methodName = $task['method']; $data = $task['data']; $thread->setVariable('taskId', $id); $thread->setVariable('task', $taskName); $thread->setVariable('method', $methodName); $thread->setVariable('data', $data); $thread->setVariable('status', PseudoThread::BUSY); $this->TaskModel->taskExecuting($id); if (!$this->loadTask($taskName)) { continue; } $taskClass =& $this->{$taskName}; if (empty($methodName)) { $methodName = 'execute'; } $taskClass->thread =& $thread; $taskClass->pid = 1; // just a single thread, so we just give a fake process id $taskClass->data =& $data; $taskClass->{$methodName}(); if ($thread->getVariable('status') === PseudoThread::ERROR) { $this->TaskModel->taskError($id); } else { $this->TaskModel->taskComplete($id); } } }