如何在c ++中超时mysql ++查询

6 c++ mysql

我使用mysql ++连接MySQL数据库来执行一堆数据查询.由于我正在读取的表格经常被写入,并且我需要一致的数据视图,因此我首先锁定表格.但是,MySQL在其锁定查询中没有'NOWAIT'的概念,因此如果表被其他东西锁定,使它们长时间锁定,我的应用程序就在那里等待.我想要它做的是能够返回并说出"无法获得锁定"之类的东西,并在几秒钟后重试.我对此超时的一般尝试如下.

如果我在锁定数据库上的表后运行此命令,我会收到超时命中的消息,但我不知道如何让mysql_query行终止.我很感激任何帮助/想法!


volatile sig_atomic_t success = 1;

void catch_alarm(int sig) {
        cout << "Timeout reached" << endl;
        success = 0;
        signal(sig,catch_alarm);
}

// connect to db etc.
// *SNIP

signal (SIGALRM, catch_alarm);
alarm(2);
mysql_query(p_connection,"LOCK TABLES XYZ as write");
Run Code Online (Sandbox Code Playgroud)

INS*_*INS 0

您可以在不同的线程中执行阻塞查询,而不必担心超时。当某些数据到达时,您会通知需要了解事务状态的线程。