Первоначально я написал несколько тестов для проверки функциональности сигналов для моей программы. Тесты оказались многообещающими, однако перемещение небольших изменений кода в мой класс в моем исходном коде доставило мне несколько проблем.
Я добавил две функции: setAlarm()
и обратный вызов alarm_handler
. setAlarm()
делает так, как сказано, на котором установлен будильник. По истечении времени вызывается обработчик тревоги, который запускает функцию исполнения.
a. cpp
void alarm_handler(int signum)
{
Database database; // can't have this as it creates a new instance. need to call same Database instance
std::cout << "\n TIMER CALLED \n" << std::endl;
database.dbExecSql();
}
void Database::setAlarm()
{
signal(SIGALRM, alarm_handler);
ualarm(500000,0);
}
чч
class Database
{
public:
void setAlarm();
dbExecSql();
};
Теперь очевидно, что создание нового объекта базы данных не приводит к выполнению операторов, находящихся в моей очереди. Так как же я могу иметь тот же экземпляр моего класса Database call dbExe cSql?
Любая помощь будет оценена.