Задать вопрос
@Kamikadze1024

Почему std::thread не работает без вызова std::cout?

Не могу понять, почему у меня не отрабатывает std::thread без вызова cout? Как такое вообще возможно?

/*
 * Dispatcher
*/
void threadDispatcherF(FileReaderObject *dev) {
    while(true) {
        //print messages from bufer to console
        string outpMsg = dev->getOutpMsg();
        while(!(outpMsg.compare("") == 0)) {
            //print message
            std::cout << outpMsg;
            outpMsg = dev->getOutpMsg();
        }
        usleep(dev->TIMEOUT_THREAD_US);
    }
}

/*
 * Initialisation of our reader
 */
void FileReaderObject::init() {

    printMessage("File read device.  Denis, 2018");
    printMessage("Press q for exit");

    std::thread threadDispatcher(threadDispatcherF, this);
    threadDispatcher.join();
}

class FileReaderObject {
private:
    const int        TIMEOUT_THREAD_US   = 10000;
    const int        TIMEOUT_WAIT_KEY_MS = 100;
    mutex            m_mutPrintMsg;
    deque<string>    m_consoleMsgs;
    bool             m_needStop;
    int              setReadParameters();
    void             printMessage(string msg);

    //drive device
    string        getOutpMsg();
    static string getChar();
    void          setNeedStop();

    friend void threadRecvF      (FileReaderObject *dev);
    friend void threadSendF      (FileReaderObject *dev);
    friend void threadReadF      (FileReaderObject *dev);
    friend void threadDispatcherF(FileReaderObject *dev);

public:
    FileReaderObject();
    ~FileReaderObject();

    void init();
};
  • Вопрос задан
  • 205 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Оптимизатор вполне вправе вышвырнуть к чертям код, который ничего не меняет во внешнем мире.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Не могу понять, почему у меня не отрабатывает std::thread без вызова cout? Как такое вообще возможно?

А в ассемблер-то не заглянуть никак? Я вижу, что всё отрабатывает, что с cout, что без, что с -O0, что с -O2.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы