2016-10-22 3 views
0

Эй, это не очень практичный пример. Это просто проверить некоторые вещи.Несколько бесконечных нитей

Потоки должны представлять собой независимые объекты ввода, которые произвольно создают данные и отправляют эти данные другому объекту-приемнику.

Моя проблема в том, что я хочу, чтобы они создавали данные в течение бесконечного времени. Но поскольку я запускаю первый поток, он застрял в причине цикла while.

Как можно запустить несколько бесконечных потоков?

класс А:

#pragma once 

#include <iostream> 
#include <thread> 

class A 
{ 

public: 

    A()  : m_ID(-1) {} 
    A(int _ID) : m_ID(_ID) {} 
    ~A()     {} 

public: 

    void DoWork() 
    { 
     std::thread T(&A::Work, this); 

     T.join(); 
    } 

private: 

    void Work() 
    { 
     while (true) 
     { 
      // do stuff 
      std::cout << m_ID << "\n"; 
     } 
    } 

private: 

    int m_ID; 

}; 

main.cpp:

#include "A.h" 

static const unsigned int s_NumberOfObjects = 5; 

void main() 
{ 
    A As[s_NumberOfObjects]; 

    for (size_t i = 0; i < s_NumberOfObjects; i++) 
    { 
     As[i] = A(i); 
    } 


    for (size_t i = 0; i < s_NumberOfObjects; i++) 
    { 
     As[i].DoWork(); 
    } 
} 
+0

Удалите строку 'T.join();' из 'A :: DoWork()' – Leon

+0

, затем я получаю ошибку: R6010 - abort() был вызван – Chris

+1

Вместо этого поставьте 'T.detach()'. – Leon

ответ

1

сделать нить переменной-члена и переместить join функции к A деструктор

class A{ 
    /* ... */ 

public: 
    ~A() { m_Worker.join(); } 

/*...*/ 
void DoWork() 
{ 
    m_Worker = std::thread(&A::Work, this); 
} 

private: 
    int m_ID; 
    std::thread m_Worker; 

}; 

использованием detach является очень обескуражен, когда вы теряете весь трек для потока, и у вас нет ва y, чтобы сказать, что он закрывается, когда приложение завершается.

+0

не работает для меня. VisualStudio сообщает мне, что функция operator = для std :: thread является удаленной функцией – Chris

+0

, на какой версии визуальной студии вы работаете? –

+0

Visual Studio Professional 2013 – Chris

Смежные вопросы