считывание с файла в поток

120
22 февраля 2018, 14:34

Необходимо главным потоком считывать данные с файла которые хранятся в виде строк, потоком t1 передавать структуру emp[i] в функцию для обработки, потоком t2 выводим обработанные значения на экран.

class Employee
{
public:
    string name;
    string position;
    string birth;
};
vector<vector<Employee>> three(vector<vector<Employee>> &company, queue<Employee> q, Employee emp, vector<Employee> pos2, vector<Employee> pos3, mutex &mtx)
    {
        mtx.lock();
        q.push(emp);
        Employee x = q.front();
        if (q.front().position == "Director")
        {
            vector<Employee> pos1;
            pos1.push_back(x);
            company.push_back(pos1);
        }
        if (q.front().position == "Manager")
        {
            if (company.size() == 1)
            {
                pos2.push_back(x);
                company.push_back(pos2);
            }
            else
            {
                pos2.push_back(x);
            }
        }
        if (q.front().position == "Employee")
        {
            if (company.size() == 2)
            {
                pos3.push_back(x);
                company.push_back(pos3);
            }
            else
            {
                pos3.push_back(x);
            }
        }
        mtx.unlock();
        Sleep(500);
        return company;
    }
       int main()
{
vector<vector<Employee>> company;
vector<Employee> pos2;
vector<Employee> pos3;
thread t1;
mutex mtx;
Employee emp[10];
queue<Employee> q;
ifstream file("gaga.txt");
string str;
int i = 0;
            while (getline(file, str))
            {
                int j = 0;
                while (!(str[j] == ','))
                {
                    emp[i].name.push_back(str[j]);
                    j++;
                }
                j++;
                while (!(str[j] == ','))
                {
                    emp[i].position.push_back(str[j]);
                    j++;
                }
                j++;
                while (!(str[j] == '\0'))
                {
                    emp[i].birth.push_back(str[j]);
                    j++;
                }
            thread t1(three, ref(company), q, emp[i], pos2, pos3, ref(mtx));//тут поток t1 должен передать структуру emp[i] для обработки,
//причем поток должен быть проинициализирован 1 раз, а не как тут 10 раз из-за цикла, наверное где - то за пределами цикла вначале.
            thread t2(some_func2, результат обработки функции three), ref(mtx))// все то же, но только этот поток служит для вывода значений на экран
если писать `   auto fut = async(three, ref(company), q, emp[i], pos2, pos3);
                company = fut.get();`
выдает ошибку компиляции

Вопрос: как с помощью потока t1 каждую итерацию цикла передавать структуру emp[i] в функцию, возвращать ее значение и передать в поток t2 для вывода результата, но так, чтобы каждая новая итерация цикла не инициализировала новый поток, а передавала значение emp[i+1] потоком t1 в функцию three, а оттуда в поток t2. После завершения цикла хочется иметь заполненную vector<vector<Employee>> company для дальнейшей работы с ней.

READ ALSO
Не могу понять в чем проблема:

Не могу понять в чем проблема:

Напишите шаблонную функцию max5(), которая принимает в качестве аргумента массив из пяти элементов типа T и возвращает наибольший элемент...

134
WebApplication &amp; Google

WebApplication & Google

Подскажите, пожалуйста, какие файлы и заголовки должна уметь отдавать WebApplication, "смотрящая" в интернет по 80-му порту так, чтобы роботы поисковиков,...

166
Что такое cin &gt;&gt; в C++?

Что такое cin >> в C++?

Что такое cin >> в C++? Как он работает? Когда его следует использовать?

174
Голосовой отпечаток

Голосовой отпечаток

Добрый день! Хотелось бы в своем приложении реализовать распознавание пользователя через его голосовой отпечатокЕсли какие нибудь библиотеки...

196