Там есть пример кода:станд :: нить пожалуйста, объясните выход
class MY_Timer
{
// ...
void start(const UInt timeOut, const UInt events, CALLBACK_TARGET reciever)
{
cout << __FUNCTION__ << " " << timerName << endl;
if (active) return;
if ((0u == timeOut) || (0u == events)) return;
if (nullptr == reciever) return;
interval = timeOut;
eventsAmount = events;
active = true;
cb_target = reciever;
thread clockieThread(&MY_Timer::clockie, this); // комментарий
clockieThread.join();
};
private:
void clockie()
{
while (eventsAmount--)
{
Sleep(interval);
cb_target(timerName, eventsAmount);
}
active = false;
}
// ...
};
void target(const char * timerName, const UInt data)
{
cout << timerName << " DATA: " << data << endl;
}
int main()
{
MY_Timer * tOne = new MY_Timer("ALPHA");
MY_Timer * tTwo = new MY_Timer("OMEGA");
tOne->start(200, 10, &target);
tTwo->start(300, 20, &target);
}
Это то, что выход выглядит следующим образом:
MY_Timer::start ALPHA
ALPHA DATA: 9
ALPHA DATA: 8
ALPHA DATA: 7
ALPHA DATA: 6
ALPHA DATA: 5
ALPHA DATA: 4
ALPHA DATA: 3
ALPHA DATA: 2
ALPHA DATA: 1
ALPHA DATA: 0
MY_Timer::start OMEGA
OMEGA DATA: 9
OMEGA DATA: 8
OMEGA DATA: 7
OMEGA DATA: 6
OMEGA DATA: 5
OMEGA DATA: 4
OMEGA DATA: 3
OMEGA DATA: 2
OMEGA DATA: 1
OMEGA DATA: 0
Не могли бы вы объяснить, почему это поведение кода как есть только один поток выполнения. Я думал, что выход будет смешиваться с сообщениями из двух потоков, например, если я буду делать это:
void foo(const char * name, int interval)
{
int step = 10;
while (step--)
{
Sleep(interval);
cout << name << " step: " << step << endl;
}
}
int main()
{
thread t1(foo, "ALPHA", 200);
thread t2(foo, "OMEGA", 300);
t1.join();
t2.join();
return 0;
}
И результат будет, как: «OMG, Многопоточность»:
ALPHA step: 9
OMEGA step: 9
ALPHA step: 8
OMEGA step: 8
ALPHA step: 7
ALPHA step: 6
OMEGA step: 7
ALPHA step: 5
OMEGA step: 6
ALPHA step: 4
ALPHA step: 3
OMEGA step: 5
ALPHA step: 2
OMEGA step: 4
ALPHA step: 1
ALPHA step: 0
OMEGA step: 3
OMEGA step: 2
OMEGA step: 1
OMEGA step: 0
Спасибо!
Вы начинаете тему, а затем сразу начинаете «присоединяться», я не уверен, чего вы ожидали. – user657267
Вызов o'death: 'clockieThread.join();' –