функция не получает обновленную очередь, используемую потоками - PullRequest
0 голосов
/ 29 января 2020

У меня есть 2 функции, которые основные запускают их как поток. первая читает файл сообщений и помещает каждую строку в очередь, а вторая функция записывает в файл сообщения очереди. по какой-то причине очередь во второй функции не обновляется, и функция ничего не записывает в выходной файл. Это первое удовольствие c:

void MessagesSender::saveMessages()
{
    std::string line = "";
    std::ifstream file;

    file.open(DATA_FILE);
    if (file.is_open())
    {
        while (getline(file, line))
        {
            m.lock();
            messages.push(line);
            m.unlock();
        }
        file.close();
        file.open(DATA_FILE, std::ofstream::out | std::ofstream::trunc);//clear file
        file.close();
    }
}

Вот второе:

void MessagesSender::sendMessages()
{
    std::ofstream file(OUTPUT_FILE);
    m.lock();
    std::queue<std::string> temp_messages = messages;//problem - "messages" is empty
    m.unlock();
    if (file.is_open())
    {
        int i = 0;
        while (!temp_messages.empty())
        {
            while (i < userName.size())
            {
                file << userName[i] << ": " << temp_messages.front() << std::endl;
                i++;
            }
            temp_messages.pop();
            i = 0;
        }
        file.close();
    }
    else std::cout << "Unable to open file";
}
int main()
{
    MessagesSender mailingList;
    while (mailingList.menu()){}//shows to the user the menu
    std::thread t1(&MessagesSender::saveMessages, mailingList);
    std::thread t2(&MessagesSender::sendMessages, mailingList);
    t1.join();
    t2.join();
}

почему "сообщения" пустые и как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...