C++ std::Thread 程序啥都不做[关闭]

Posted

技术标签:

【中文标题】C++ std::Thread 程序啥都不做[关闭]【英文标题】:C++ std::Thread program does nothing [closed]C++ std::Thread 程序什么都不做[关闭] 【发布时间】:2015-05-26 20:28:09 【问题描述】:

我正在使用 std::Thread 类并编写了这个小代码来测试它,但它看起来实际上什么也没做。

#include <iostream>
#include <thread>

using namespace std;

class TestThread

  public:
      TestThread();
      ~TestThread();
      void foo();
      void bar();
;

TestThread::TestThread()


TestThread::~TestThread()


void TestThread::foo()

  while(true)
    cout << "Thread 1 reporting" << endl;


void TestThread::bar()

  while(true)
    cout << "Thread 2 reporting" << endl;



int main(int argc, char**argv)

   TestThread test;
   thread t1(&TestThread::foo, &test);
   thread t2(&TestThread::bar, &test);
   t1.join();
   t2.join();
   return 0;
 

当我执行这个时,它基本上什么都不做。在我启动它而不打印任何东西后它就停止了。我做错了吗?

【问题讨论】:

不能执行它。它不编译(缺少包含和using namespace)并且不链接(缺少构造函数和析构函数定义)。除此之外,它确实做你想让它做的事情。那么,我们要不要再试一次? 对不起,我没有发布完整的代码,我对 C 或 C++ 并不陌生,我是这个线程的新手,根本不知道我必须使用 -pthread。添加它使事情起作用 我不知道我是否遗漏了什么,但是这段代码编译并逐字成功。 我编辑了它,我没有添加包含和使用命名空间,所以 Lightness 无法编译它。 【参考方案1】:

正如 cmets 所说,您缺少 includeusing 语句,因此您可能正在执行其他程序而不是这个程序。

这是一个经过修正的程序,可以实际编译和运行。

#include <thread>
#include <iostream>

using std::thread;
using std::cout;
using std::endl;

class TestThread

  public:
    TestThread()  
    ~TestThread()  
    void foo();
    void bar();
;

void TestThread::foo()

    while(true)
        cout << "Thread 1 reporting" << endl;


void TestThread::bar()

    while(true)
        cout << "Thread 2 reporting" << endl;



int main(int argc, char**argv)

    TestThread test;
    thread t1(&TestThread::foo, &test);
    thread t2(&TestThread::bar, &test);
    t1.join();
    t2.join();
    return 0;

下面是编译和运行它的方法,假设你把它放在一个名为ThreadPlay.cc的文件中。

g++ -std=c++11 -pthread ThreadPlay.cc
./a.out

【讨论】:

我没有错过包含和语句,我只是复制了代码的相关部分,我认为我在使用线程时出错或需要调用其他方法。但我想我在编译时没有使用-pthread。我用 -pthread 再次尝试了它,它工作了谢谢你 @Tychus,当您的问题涉及运行代码并且您发布一个无法编译的示例时,有时社区可能会有点苛刻,因为它增加了解决实际问题所需的工作量(开销) .但是,由于这几乎是你唯一缺少的东西,我认为你已经付出了足够的努力。 没有什么“苛刻”的。您确实错过了包含和语句,并且在添加它们时,您的问题无法重现。所以,你在浪费我们的时间。这不是“苛刻”:这是事实。这就是我们要求您提供testcase 的原因:它证明问题出在您所说的那样。在这种情况下,它不是。不仅仅是我们:学习这项技能类似于学习如何调试,这对你自己的职业生涯至关重要。干杯。 @merlin2011:要求人们在 meta 上发帖寻求帮助重新打开愚蠢的、不可重现的问题是不负责任的。我对 25k 用户的期望更高。它不只是“不编译”;即使进行编译,它也不匹配问题。请在评论之前实际尝试一下。 @LightnessRacesinOrbit,这很公平。我已经删除了该评论。不包括-pthread 的问题是可以重现的。问题是 OP 未能正确描述实际问题。

以上是关于C++ std::Thread 程序啥都不做[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++(0x) 中是不是存在无操作“啥都不做”函数对象?

DotNet Pack 啥都不做

为啥#后跟一个数字似乎在C plus plus中啥都不做

请求位置时应用程序崩溃并且用户啥都不做

cuPrintf 啥都不做(程序使用固定+映射内存,CUBLAS 也是)

pushViewController 在多个标签应用程序中啥都不做?