代码如下:
#include
#include<windows.h>
HANDLE evs[5],evs2[4],hds[6];
class threads
{
public:
static inline void draw1()
{
while (1)
{
Sleep(40);
WaitForSingleObject(evs[0], INFINITE);
cout << 1;
SetEvent(evs[1]);
}
}
static inline void part1()
{
while (1)
{
Sleep(1);
WaitForSingleObject(evs[1], INFINITE);
cout << 2;
SetEvent(evs2[0]);
SetEvent(evs[2]);
}
}
static inline void part2()
{
while (1)
{
Sleep(1);
WaitForSingleObject(evs[2], INFINITE);
cout << 3;
SetEvent(evs2[1]);
SetEvent(evs[3]);
}
}
static inline void part3()
{
while (1)
{
Sleep(1);
WaitForSingleObject(evs[3], INFINITE);
cout << 4;
SetEvent(evs2[2]);
SetEvent(evs[4]);
}
}
static inline void part4()
{
while (1)
{
Sleep(1);
WaitForSingleObject(evs[4], INFINITE);
cout << 5;
SetEvent(evs2[3]);
}
}
static inline void draw2()
{
while (1)
{
Sleep(1);
WaitForMultipleObjects(4, evs2, true, INFINITE);
cout << 6 ;
SetEvent(evs[0]);
}
}
};
int main()
{
for (int i = 0; i < 4; i++)
{
evs[i] = CreateEvent(NULL, false, false, NULL);
evs2[i] = CreateEvent(NULL, false, false, NULL);
}
evs[4] = CreateEvent(NULL, false, false, NULL);
hds[0] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threads::draw1, NULL, 0, NULL);
CloseHandle(hds[0]);
hds[1] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threads::part1, NULL, 0, NULL);
CloseHandle(hds[1]);
hds[2] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threads::part2,NULL, 0, NULL);
CloseHandle(hds[2]);
hds[3] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threads::part3, NULL, 0, NULL);
CloseHandle(hds[3]);
hds[4] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threads::part4, NULL, 0, NULL);
CloseHandle(hds[4]);
hds[5] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threads::draw2, NULL, 0, NULL);
CloseHandle(hds[5]);
SetEvent(evs[0]);
while(1)
{
//nop
}
}
多线程循环输出123456
最新推荐文章于 2024-05-19 18:46:49 发布