C++ 螺纹等级不为';我不能正常工作

C++ 螺纹等级不为';我不能正常工作,c++,multithreading,c++11,C++,Multithreading,C++11,与线程和并行编程相关 我在线程上看到有人回答了一个问题。我试着用他回答的代码写了出来。 我试过了 #包括 #包括 使用名称空间std; void printx() { cout您需要了解线程的一些基本概念: thread.detach()将执行线程与thread对象分离,允许独立地继续执行。一旦线程退出,将释放所有分配的资源 如果两个线程都具有相同的线程id,则它们是“可接合的”。一旦调用joinmethod或detachmethod,它们就变成“不可接合的” 问题 您首先调用了thread.d

与线程和并行编程相关

我在线程上看到有人回答了一个问题。我试着用他回答的代码写了出来。 我试过了

#包括
#包括
使用名称空间std;
void printx()
{

cout您需要了解线程的一些基本概念:

thread.detach()
将执行线程与thread对象分离,允许独立地继续执行。一旦线程退出,将释放所有分配的资源

如果两个线程都具有相同的
线程id
,则它们是“可接合的”。一旦调用
join
method或
detach
method,它们就变成“不可接合的”

问题 您首先调用了
thread.detach()
,这将把线程从主线程中分离出来。然后您再次尝试
join
它,这将导致错误,因为两个线程是分离的,并且具有不同的
线程id

解决方案 使用
join
detach
。不要同时使用这两种方法

  • Join
    当线程执行完成时,函数返回

      void printx()
       {
         cout << "In thread"<< endl;
       }
      int main()
      {
        cout << "Before thread"<< endl; 
        thread t1(printx);
        t1.join();
        cout << "After Thread"<< endl; 
        return 0;
    }
    
    void printx()
    {
    
    cout您需要了解线程的一些基本概念:

    thread.detach()
    将执行线程与thread对象分离,允许独立地继续执行。一旦线程退出,将释放所有分配的资源

    如果两个线程都具有相同的
    线程id
    ,则它们是“可接合的”。一旦调用
    join
    method或
    detach
    method,它们就变成“不可接合的”

    问题 您首先调用了
    thread.detach()
    ,这将把线程从主线程中分离出来。然后您再次尝试
    join
    它,这将导致错误,因为两个线程是分离的,并且具有不同的
    线程id

    解决方案 使用
    join
    detach
    。不要同时使用这两种方法

  • Join
    当线程执行完成时,函数返回

      void printx()
       {
         cout << "In thread"<< endl;
       }
      int main()
      {
        cout << "Before thread"<< endl; 
        thread t1(printx);
        t1.join();
        cout << "After Thread"<< endl; 
        return 0;
    }
    
    void printx()
    {
    
    cout打印相同的字符串不是很好的调试方法,打印不同的字符串并检查代码的控制流。检查哪个部分没有执行。正如@JayJoshi在他的回答中指出的,线程一旦分离就不能连接。在这里找到线程的相关文档-打印相同的字符串不是很好的调试方法,打印找出不同的字符串并检查代码的控制流。检查哪个部分没有执行。正如@JayJoshi在他的回答中指出的,线程一旦分离就不能连接。在这里找到关于线程的相关文档-谢谢你的回答,但我认为我打印了错误的代码。否则会有错误。仍然删除NG的那一行将做相同的输出。我发现一个解决方案::DEVC++需要正确的输出的附加文件。所以我安装了代码块和输出。谢谢你的答案,但是我认为错误的代码是我打印的。否则就会出错。仍然删除这行会做相同的输出。我找到了一个解决方案:DeV C++需要额外的文件来输出正确的输出,所以我安装了代码块和输出。
    void printx()
    {
        cout << "In thread"<< endl;
    }
    int main()
    {
        cout << "Before thread"<< endl; 
        thread t1(printx);
        t1.detach();
        cout << "After Thread"<< endl; 
        return 0;
    }