我想检查Mysql连接是否还活着。 (使用Mysql-connector-c ++)
所以..我每5分钟调用一次“检查功能”
像这样void checkConnection()
{
std::this_thread::sleep_for(std::chrono::minutes(5));
// -- check connection
std::async(std::launch::async, checkConnection); // Here
}
安全吗?? ??
答案 0 :(得分:0)
在您指定的情况下,它是安全的,因为std::launch::async
- 当它自己时 - 指定您希望在单独的线程上完成此操作。否则,由于递归调用,存在堆栈溢出的危险。
但请注意,此处的行为是:
所以你总是使用一个线程,除非你每次都要为创建和破坏付费。最好只使用一个线程,例如
void checkConnection(std::atomic<bool>& stopFlag)
{
using namespace std::chrono; // for 5min shorthand, if C++14
while (!stopFlag) {
std::this_thread::sleep_for(5min);
// -- check connection
}
}
或者更好的是,使用可以指定延迟的线程池。但是,目前尚未提供标准库。