Estoy usando mysql ++ para conectarme a una base de datos MySQL y realizar un montón de consultas de datos. Debido a que las tablas de las que estoy leyendo se escriben constantemente, y que necesito una vista coherente de los datos, primero cierro las tablas. Sin embargo, MySQL no tiene el concepto de 'NOWAIT' en su consulta de bloqueo, por lo tanto, si las tablas están bloqueadas por otra cosa que las mantiene bloqueadas durante un tiempo prolongado, mi aplicación espera ahí. Lo que quiero que haga es poder regresar y decir algo como "No se pudo obtener el bloqueo" y volver a intentarlo en unos segundos. Mi intento general de este tiempo de espera es más abajo.Cómo agotar el tiempo de espera de una consulta de mysql ++ en C++
Si ejecuto esto después de bloquear la tabla en la base de datos, recibo el mensaje de que se agotó el tiempo de espera, pero no sé cómo terminar la línea mysql_query para terminar. Agradecería cualquier ayuda/ideas!
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");