Необходимо главным потоком считывать данные с файла которые хранятся в виде строк, потоком 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 для дальнейшей работы с ней.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости