Сегодня я бы реализовал очень простой класс Thread.Мой вопрос заключается в том, почему этот код выполняется синхронно:
struct Clerk : public Thread
{
Clerk()
{
IsOnService = false;
}
void Run()
{
std::deque<int> dq;
std::cout << this->GetId() << " receive new customer " << '\n';
for (int i = 0; i < 1000000; ++i) dq.push_front(i);
std::cout << this->GetId() << " has finished" << '\n';
IsOnService = false;
}
bool IsOnService;
};
struct Customer
{
bool IsOnService;
};
struct Service
{
Clerk* clerk;
Customer* customer;
Service(Clerk* c, Customer* cu)
{
clerk = c;
customer = cu;
clerk->Join();
}
};
int main()
{
int nClerks = 5;
Clerk* clerks[] = {
new Clerk(), new Clerk(), new Clerk(), new Clerk(), new Clerk()
};
while (1) {
if (GetAsyncKeyState(0x43) & 0x7FFF) {
Customer* newCustomer = new Customer();
for (int i = 0; i < nClerks; ++i)
if (!clerks[i]->IsOnService) {
Service* newService = new Service(clerks[i], newCustomer);
delete newService;
break;
}
}
}
for (int i = 0; i < nClerks; ++i) delete clerks[i];
return 0;
}
Первый
Эта очередь предназначена только для выполнения тяжелой работы, которая занимает несколько раз, но когда я запускаю приведенный выше код, это требует времени, нозапускать поток для потока, я имею в виду, что у меня есть что-то вроде этого при запуске:
C:>100 receive new customer
... несколько раз ...
C:>100 has finished
C:>150 receive new customer
... несколько раз ...
C:>150 has finished
... и т. Д.
ИЯ хочу иметь следующее поведение:
C:>100 receive new customer
C:>150 receive new customer
C:>100 has finished
C:>150 has finished
Или что-то в этом роде.Если кто-то может мне помочь.Я использовал deque, потому что хочу выполнить задачу, которая требует времени, но код должен компилироваться в C ++ 98.Пожалуйста, не отвечайте мне кодом, который реализован на C ++ 11 или выше.