0
我有一個單獨的類,看起來是這樣的:喚醒線程和退出睡眠
//Test.h
class Test
{
private:
static std::mutex mtx;
static std::condition_variable cv;
static bool end;
static void DoSomethingThread();
static void SomeOtherFunction();
public:
static void Start();
}
//Test.cpp
std::mutex Test::mtx;
std::condition_variable Test::cv;
bool Test::end = false;
void Test::Start()
{
std::thread t_thread(Test::DoSomethingThread);
while(a) {
if (b) {
// End thread.
std::unique_lock<std::mutex> lock(mtx);
Test::end = true;
Test::cv.notify_one();
t_thread.join();
Test::SomeOtherFunction();
// Restart thread.
Test::end = false;
t_thread = std::thread(Test::DoSomethingThread);
}
...
}
}
void Test::DoSomethingThread()
{
std::unique_lock<std::mutex> lock(mtx);
while (1) {
//Do some work here.
Test::cv.wait_for(lock, std::chrono::seconds(1000), []() { return Test::end; });
if (Test::end) { break; }
}
}
我發現this page此代碼,說實話真的不知道這是如何工作。但是這個人和我有同樣的問題,我認爲它適用於我的情況,但它沒有。
所以我現在有一個線程t_thread
它永遠運行,它做了一些工作,然後睡了1000秒,再一次。我需要的是某種方式將這個線程從睡眠中喚醒並退出。所以SomeOtherFunction()
可以做它的工作,然後重新啓動線程。
爲什麼這段代碼不工作,我該如何讓它工作?
刪除問題的答案並添加爲答案。 –
@SteveM完成。謝謝。 – user1806687