Применение WaitForSingleObject/WaitForMultipleObjects
Есть код, рисующий в консоли три ряда символов '#', после чего ряды убывают назад. Нужно с использованием WaitForSingleObject/WaitForMultipleObjects добиться того, что ряды будут двигаться вперёд в последовательности 1,3,2, назад - (2,3)(одновременно),1. Только пришёл к этой теме и совсем не понимаю как и что делать, буду благодарен за любую помощь.
#include <windows.h>
#include <iostream>
using namespace std;
HANDLE hConsole;
CRITICAL_SECTION cs;
COORD pos;
// =>1,3,2 | <=(2,3),1
void draw(int x, int y, char symbol) {
EnterCriticalSection(&cs);
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(hConsole, pos);
cout << symbol;
LeaveCriticalSection(&cs);
}
#define X_MIN 20
#define X_MAX 40
class CylParams {
public:
int row;
int delay;
HANDLE iOnRight;
HANDLE iOnLeft;
};
DWORD WINAPI f0(PVOID param) {
CylParams* p = (CylParams *)param;
int row = p->row;
while (INFINITE) {
//eWaitRight
for (int x0 = X_MIN; x0 < X_MAX; x0++) {
draw(x0, row, '#');
Sleep(p->delay);
}
SetEvent(p->iOnLeft);
//eWaitLeft
for (int x0 = X_MAX; x0 > X_MIN; x0--) {
draw(x0, row, ' ');
Sleep(p->delay);
}
SetEvent(p->iOnRight);
}
}
int main() {
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
InitializeCriticalSection(&cs);
CylParams params[3];
for (int i = 0; i < 3; i++) {
params[i].row = 3 + i * 2;
params[i].delay = 30 + i * 30;
params[i].iOnLeft = CreateEvent(NULL, false, false, NULL);
params[i].iOnRight = CreateEvent(NULL, false, false, NULL);
}
for (int i = 0; i < 3; i++) {
CreateThread(NULL, 0, f0, params + i, 0, NULL);
}
system("pause > 0");
return 0;
}