Tôi đang sử dụng mysql ++ để kết nối với cơ sở dữ liệu MySQL để thực hiện một loạt truy vấn dữ liệu. Do thực tế là các bảng tôi đang đọc từ liên tục được ghi vào, và rằng tôi cần một cái nhìn nhất quán của dữ liệu, tôi khóa các bảng đầu tiên. Tuy nhiên, MySQL không có khái niệm 'NOWAIT' trong truy vấn khóa của nó, do đó nếu các bảng bị khóa bởi một cái gì đó khác mà giữ chúng bị khóa trong một thời gian dài, ứng dụng của tôi ngồi đó chờ đợi. Những gì tôi muốn làm là để có thể trở lại và nói điều gì đó như 'Khóa không thể có được' và thử lại sau vài giây. Nỗ lực chung của tôi tại thời gian chờ này là dưới đây.Cách hết thời gian chờ truy vấn mysql ++ trong C++
Nếu tôi chạy sau khi khóa bảng trên cơ sở dữ liệu, tôi nhận được thông báo rằng thời gian chờ được nhấn, nhưng tôi không biết làm thế nào để sau đó nhận được dòng mysql_query để chấm dứt. Tôi đánh giá cao bất kỳ trợ giúp/ý tưởng!
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");