Применение атомарных операций

198
04 июля 2017, 23:09

Здравствуйте, я пытаюсь произвести запись информации в текстовый файл и в вектор, далее отсортировать вектор , и попросить вводить информацию снова и так далее до того момента,когда мне нужно остановиться.

Подскажите , пожалуйста, как сделать так,чтобы попросить ввести информацию снова, так как первый раз: ввод и сортировка происходит, как нужно и программа завершается.

Думаю , что нужен какой-то цикл, но не знаю, как правильно сделать это...

STring.h:

#pragma once
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <string>
#include <algorithm>
#include <mutex>
#include <chrono>
#include <atomic>

class STring
{
    std::vector<std::string> vec;
    std::mutex mtx;
public:
    STring(){}
    void Recording();
    void SortVec();
};

STring.cpp:

#include "STring.h"
std::atomic<bool> data_ready(false);
void STring::Recording()
{
    //while (1)
    //{
        std::lock_guard<std::mutex> lock(mtx);
        std::string fileName;
        std::string str;
        //std::vector<std::string> vec;
        //std::cout << "Input file name: ";
        //std::cin >> fileName;
        std::ofstream out("1.txt", std::ios_base::app);

        std::cout << "Input smth: ";
        while (std::cin >> str)
        {
            out << str;
            vec.push_back(str);
        }
        data_ready = true;
        std::this_thread::sleep_for(std::chrono::seconds(10));
    //}
}
void STring::SortVec()
{
    //while (1) 
    //{
        //std::lock_guard<std::mutex> lock(mtx);
        while (!data_ready.load())
        {
            std::this_thread::sleep_for(std::chrono::seconds(5));
        }
        std::sort(vec.begin(), vec.end());
        for (auto i : vec)
        {
            std::cout << i << std::endl;
        }
    //}
}

**Source.cpp:

#include <iostream>
#include "STring.h"
#include <vector>
#include <thread>
int main()
{
    STring w;
    std::thread Write(&STring::Recording,&w);
    std::thread Sort(&STring::SortVec, &w);
    Sort.join();
    Write.join();
    system("pause");
    return 0;
}

Результат:

Answer 1

Так?:

int main()
{
    while (true) {
        STring w;
        std::thread Write(&STring::Recording,&w);
        std::thread Sort(&STring::SortVec, &w);
        Sort.join();
        Write.join();
    }
    system("pause");
    return 0;
}
READ ALSO
Стандартные библиотеки С++

Стандартные библиотеки С++

Доброго времени суток гуру С++ и не толькоНачал изучать этот замечательный язык по книге 2016 , но, как оказывается, некоторые примеры не совсем...

189
Сделать нормальный выход из чата с++

Сделать нормальный выход из чата с++

Когда один из клиентов чата закрывает чат(закрывает приложение) на сервере начинает лагать его последнее сообщение(отправляться много раз)...

205
SFML SocketSelector::wait() некорректно работает

SFML SocketSelector::wait() некорректно работает

Делаю небольшой мессенджер (протокол TCP)Есть сервер и клиент

233
Возможно ли русифицировать Dev Tools Chrome?

Возможно ли русифицировать Dev Tools Chrome?

Как можно русифицировать инструменты разработчика (Dev Tools) в браузере Chrome?

302