64,648
社区成员
发帖
与我相关
我的任务
分享
mutex.tryLock();
QString fileName = QDir::currentPath() + "/systemInfo.log";
QFile aFile(fileName);
do
{
aFile.open(QIODevice::Append | QIODevice::Text);
mutex.unlock();
mutex.lock();
} while (!waitMutex.wait(&mutex, 60*1000));
mutex.unlock();
这里的互斥量频繁的锁定解锁,让我看了有点头晕 就没有想到你的这里std::unique_lock<std::mutex> locker(mutex);
现在有了你的思路我先去试试,有什么问题在交流[/quote]
OK
mutex.tryLock();
QString fileName = QDir::currentPath() + "/systemInfo.log";
QFile aFile(fileName);
do
{
aFile.open(QIODevice::Append | QIODevice::Text);
mutex.unlock();
mutex.lock();
} while (!waitMutex.wait(&mutex, 60*1000));
mutex.unlock();
std::unique_lock<std::mutex> locker(mutex);
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <atomic>
std::mutex mutex;
std::condition_variable signal;
std::atomic_bool end;
void functor()
{
end = false;
std::unique_lock<std::mutex> locker(mutex);
int counter = 0;
while (!end)
{
++counter;
signal.wait_for(locker, std::chrono::milliseconds(5000));
std::cout << counter << std::endl;
}
std::cout << "The end!\n";
}
int main()
{
std::thread thread(functor);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
end = true;
signal.notify_one();
if (thread.joinable())
thread.join();
return 0;
}