Необходимо главным потоком считывать данные с файла которые хранятся в виде строк, потоком 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
для дальнейшей работы с ней.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Напишите шаблонную функцию max5(), которая принимает в качестве аргумента массив из пяти элементов типа T и возвращает наибольший элемент...
Подскажите, пожалуйста, какие файлы и заголовки должна уметь отдавать WebApplication, "смотрящая" в интернет по 80-му порту так, чтобы роботы поисковиков,...
Что такое cin >> в C++? Как он работает? Когда его следует использовать?
Добрый день! Хотелось бы в своем приложении реализовать распознавание пользователя через его голосовой отпечатокЕсли какие нибудь библиотеки...