C++挂起线程,然后通过其他线程重新激活
C++ suspend a thread and reactivate via a different thread
我没有做太多的多线程,所以我不知道如何搜索这个问题。它可能已经回答了,我只是不知道我在寻找什么。
基本上,我希望有一种方法可以在线程执行的特定点挂起线程。然后,我希望能够在线程通过其他线程挂起后立即恢复线程。
窗户上有这样的东西吗?
尝试使用 std::condition_variable。条件变量是可用于阻止线程的"同步原语"。您可以在此处找到有关条件变量的更多信息:http://en.cppreference.com/w/cpp/thread/condition_variable
下面是演示相关行为的快速C++程序的示例。您可以阻止和取消阻止来自另一个线程的线程,如下所示:
#include<iostream>
#include<thread>
#include<condition_variable>
#include<mutex>
std::condition_variable cv;
std::mutex lock;
void foo(){
std::unique_lock<std::mutex> ulock(lock);
cv.wait(ulock);
std::cout<<"Thread Complete"<<std::endl;
}
void bar(){
cv.notify_all();
}
int main()
{
std::thread first(foo);
std::thread second(bar);
first.join();
second.join();
return 0;
}
抱歉,但只是做
#include<iostream>
#include<thread>
#include<condition_variable>
#include<mutex>
std::condition_variable cv;
std::mutex lock;
void foo() {
std::unique_lock<std::mutex> ulock(lock);
cv.wait(ulock);
std::cout << "Thread Complete" << std::endl;
}
void bar() {
cv.notify_all();
}
int main()
{
std::thread second(bar);
std::thread first(foo);
first.join();
second.join();
return 0;
}
所以例如开始"第二"为..她。。。第一
例如,在视觉工作室中锁定了这个。
(我所期望的,因为我们在有人等待通知之前通知......
相关文章:
- C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?
- 使用 task_group 的英特尔线程构建模块性能不佳(新用户)
- 如何在新的 C++17 并行算法中管理线程?
- C++挂起线程,然后通过其他线程重新激活
- 使用较新版本的 g++ 导致多线程性能下降?
- 只有在上一个线程返回后才启动一个新的"wxThread"
- C++:尝试将新节点添加到链表会产生"线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)"错误
- 如何仅在使用 c++ 中的 boost 完成所有任务时才向线程池添加新任务
- 在C++中将所有TLS(线程本地存储)变量设置为新的单个值
- QObject::setParent:无法设置父级,新的父级位于不同的线程中
- 在线程在 C++ 中完成后将新任务分配给线程
- 为线程设置新优先级时不允许操作
- 将双端传递到新的线程
- 从最慢的线程或从更快的线程激活线程
- 带有插槽和信号的QThread似乎不会创建新的线程
- 如何转移线程以将消息发送到新窗口
- 在DLL中使用新的Vista线程池API也可以在XP中加载(在XP中不使用线程池代码)
- QT小部件插槽调用没有被单独的线程信号激活
- 使用Qt,其中工作线程创建新的GUI元素
- 在新托管线程中通过 C# 在混合模式程序集中调用 STL 矢量的push_back