- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我们已经有了一个 std::thread
类时,为什么我们需要 std::this_thread
命名空间?
它们之间的基本区别是什么?
什么时候应该使用 std::thread
类以及什么时候使用 std::this_thread
命名空间?
最佳答案
this_thread
命名空间将访问当前线程的函数分组,所以当我们需要在当前线程上做一些事情时,我们不需要访问 thread
对象线程。
线程类不提供对 yield 和 sleeping 的访问,这些函数只对当前线程有意义,因此可以在 this_thread
命名空间中找到。
如果我们想要关于不同线程的信息,我们需要那个线程的thread
实例,如果我们需要访问当前线程,我们总是可以通过中的函数来实现this_thread
命名空间。
使用 this_thread
命名空间的想法在扩展草案中也有解释:
this_thread Namespace
Note the use of the this_thread namespace to disambiguate when you are requesting the id for the current thread, vs the id of a child thread. The get_id name for this action remains the same in the interest of reducing the conceptual footprint of the interface. This design also applies to the cancellation_requested function:
std::thread my_child_thread(f);
typedef std::thread::id ID:
ID my_id std::this_thread::get_id(); // The current thread's id
ID your_id my_child_thread.get_id(); // The child thread's id
bool have_i_been_canceled = std::this_thread::cancellation_requested(); // Current thread's cancellation status
bool have_you_been_canceled = my_child_thread.cancellation_requested(); // Child thread's cancellation status
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2320.html
将 this_thread
命名空间中的函数添加为 thread
类的静态成员可能已经完成,但是 get_id
函数将有被称为其他东西,使其与线程类的现有 get_id
函数明显不同。换句话说,我的猜测是 C++ 团队决定将这些函数添加到一个单独的命名空间,以便更清楚地表明这些函数正在读取或操作当前线程,如果将它们简单地添加为静态,则不会同样清楚线程类的成员。
关于c++ - std::thread 类与 C++ 中的 std::this_thread 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853667/
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
我是一名优秀的程序员,十分优秀!