- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含两个线程的简单程序,一个将 packaged_task
推送到一个 deque
中,另一个执行它。在任务中有一个 this_thread::sleep_for
,我希望只有“进程”线程会等待它,但两者都在等待,从而使执行顺序进行。我缺少什么?
#include <future>
#include <iostream>
#include <deque>
std::mutex m;
std::condition_variable cv;
std::deque<std::packaged_task<void(int)>> deque;
void post() {
int id = 0;
auto lambda = [](int id) {
std::this_thread::sleep_for(std::chrono::seconds(std::rand() % 10 + 1));
std::cout << id << std::endl;
};
while (true) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::packaged_task<void(int)> task(lambda);
task(id++);
std::lock_guard<std::mutex> lg(m);
deque.emplace_back(std::move(task));
cv.notify_one();
}
}
void process() {
std::deque<std::packaged_task<void(int)>> to_exec;
while (true) {
while (!to_exec.empty()){
std::future<void> fut = to_exec.front().get_future();
fut.get();
to_exec.pop_front();
}
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []() {return !deque.empty(); });
while (!deque.empty()) {
to_exec.push_back(std::move(deque.front()));
deque.pop_front();
}
}
}
int main() {
std::thread tpost(post);
std::thread tprocess(process);
tpost.join();
tprocess.join();
}
最佳答案
我认为使用 std::async 会更有效而不是 sleep 随机秒...
关于c++ - this_thread::sleep_for 影响其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44328729/
C++11 std::this_thread::yield() 和 std::this_thread::sleep_for() 有什么区别?如何决定何时使用哪一个? 最佳答案 std::this_th
我在实现过程中遇到了一个具体问题,但找不到解决方案。 我有一个分为两部分的应用程序。一部分是 Java swing GUI。第二部分是一个 C++ 应用程序,它执行所有(耗时的)计算逻辑。这两个进程(
我在编写 Microsoft 特定的 C++ 代码时被告知要编写 Sleep(1)在自旋锁定方面比 Sleep(0) 好得多,因为 Sleep(0) 将使用更多的 CPU 时间,而且,它只有在有另一个
C++ 98和Boost 1.54 我在弄清楚为什么使用boost::this_thread::sleep_for会使我的整个程序处于休眠状态时遇到了麻烦。调用Wait()函数的唯一时间和地点是在此线
我正在尝试做一件非常简单的事情(但花了几个小时没有结果):打印一行,睡一会儿,打印第二行。我希望下面的代码可以做到这一点,但是,它首先会休眠,然后同时打印两行!谁能看到我在这里缺少的东西? 这是完整的
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: std::this_thread::sleep_for() and GCC 尝试编写一个简单的计时器和一些代
我正在使用 this_thread::sleep_for() 进行测试创建一个类似于 cout 的对象, 除了在打印字符串时它会在每个字符之间有一个小的延迟。但是,它不是在每个字符之间等待 0.1 秒
我可以通过以下方式将线程 ID 打印到控制台: cout Windows -> Threads -> [ID column] 如果我在 Debug -> Windows -> Threads 中按此
我有一个包含两个线程的简单程序,一个将 packaged_task 推送到一个 deque 中,另一个执行它。在任务中有一个 this_thread::sleep_for,我希望只有“进程”线程会等待
有人可以提供C++应用程序中std::this_thread::yield()用法的真实示例吗? 最佳答案 我在实现std::lock的过程中使用了yield,可以在这里找到: http://llvm
std::this_thread::get_id 是否独立于调用它的线程的创建方式(无论是通过 std::thread 还是 OpenMP 或 pthreads 或操作系统 API)? 最佳答案 是的
这正确地拉入了一个文本文件,但它没有以正确的顺序输出它,我需要一个线程来产生,但是当我尝试实现它时,它没有工作。每次程序运行时,它都会以随机顺序显示 vows 和 cons,即使使用了 yield 函
同事和我讨论了一个假设的问题,当一个人想用 std::atomic_flag 实现自旋锁互斥锁,但也实现自旋锁不是 while(true) 而是作为 while(true) { cnt=0;
在开发基于 VoIP 的应用程序时,我们有一个通用的多线程 C++11 模块。它在 iOS、MacOS 中运行良好,但在 Android 中发现线程调度困难。 可选的设计说明(仅在感兴趣时) 我有几个
在 Debug模式下运行时,抛出中断错误时崩溃: 如何中断线程池,以及如何正确捕获中断(以及在哪里?在分派(dispatch)的作业中,还是在 CancelAll 中?)如果没有中断点,它不会崩溃,但
在使用 std::this_thread::sleep_for() 毫秒及以上时,是否需要考虑任何已知的可移植性问题? 在我正在进行的项目中,我希望使用 Microsoft 的 Sleep() 到 n
boost/thread/pthread/shared_mutex.hpp 包含这段代码: ... #include ... class shared_mutex { ... voi
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个循环,我想确保它在每个循环中运行(大约)固定的时间量。 我正在使用 sleep_for 来实现此行为,但我也希望程序能够在不完全支持标准线程库的环境中编译。现在我有这样的东西: using n
请注意,这不是关于 std::condition_variable::wait_for() 的问题。我知道这可能会虚假唤醒。 我的程序的行为表明这个问题的答案是肯定的,但是 STL 文档对于 cond
我是一名优秀的程序员,十分优秀!