Как заставить функцию обратного вызова использовать тот же экземпляр класса - PullRequest
0 голосов
/ 28 апреля 2020

Первоначально я написал несколько тестов для проверки функциональности сигналов для моей программы. Тесты оказались многообещающими, однако перемещение небольших изменений кода в мой класс в моем исходном коде доставило мне несколько проблем.

Я добавил две функции: 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?

Любая помощь будет оценена.

...