多线程循环输出123456

博客展示了一段C++代码,通过创建多个线程和事件对象实现特定输出逻辑。定义了一个`threads`类,包含多个静态内联函数用于线程执行,在`main`函数中创建线程并设置事件,实现循环输出1 - 6的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下:
#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
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值