您的位置:首页 > 编程语言 > C语言/C++

c++实现子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次

2017-09-05 14:54 435 查看
准确的说这是在别人代码上修改的,虽说这种实现方法可以实现题意。但是总感觉还有更好的方法,如果读者有更好的方法欢迎留言,如果读完本文有所收获也可以留言,大家一起分享。

#include <stdio.h>
#include <process.h>
#include <windows.h>

HANDLE   g_hThreadEvent1;
HANDLE   g_hThreadEvent2;

int g_nMainLoopNum = 0;
int g_nSubLoopNum = 0;

#define  LOOPNUM   50
#define  MAINLOOPNUM   100
#define  SUBLOOPNUM  10

unsigned int __stdcall subThreadFun(void* pData)
{
while (1)                                                                                   //子线程要一直监听信号量?
{
WaitForSingleObject(g_hThreadEvent2, INFINITE);                                         //等待事件2的信号量,期间不往下执行     P(event2)

g_nSubLoopNum++;                                                                        //子线程执行次数
for (int i = 1; i <= SUBLOOPNUM; i++)
{
printf("子线程编号是 %d ,在循环第 %d 次\n", GetCurrentThreadId(), i);
}

printf("************子线程正在执行第%d次**************\n\n", g_nSubLoopNum);
ReleaseSemaphore(g_hThreadEvent1, 1, NULL);                                             //设置事件1的信号量,相当于执行主线程   v(event1)

Sleep(100);
}
return  0;
}

int main()
{
g_hThreadEvent1 =  CreateSemaphore(NULL, 0, 1, NULL);
g_hThreadEvent2 =  CreateSemaphore(NULL, 1, 1, NULL);
_beginthreadex(NULL, 0, subThreadFun, NULL, 0, NULL);                                       //创建子线程

//相当于main为主线程
for (int i = 1; i <= LOOPNUM; ++i)
{
WaitForSingleObject(g_hThreadEvent1, INFINITE);                                         //一直等待线程事件1的信号量             p(event1)

g_nMainLoopNum++;                                                                       //主线程执行次数
for (int num = 1; num <= MAINLOOPNUM; num++)
{
printf("主线程编号是 %d ,在循环第 %d 次\n", GetCurrentThreadId(), num );
}
printf("************主线程正在执行第%d次**************\n\n", g_nMainLoopNum);

Sleep(100);

if (i != LOOPNUM)
{
ReleaseSemaphore(g_hThreadEvent2, 1, NULL);                                         //给事件2设置信号量,就是让子线程执行   v(event2)
}
else
break;
}

CloseHandle(g_hThreadEvent1);
CloseHandle(g_hThreadEvent2);
return 0;
}


原博客地址:http://blog.csdn.net/morewindows/article/details/7392749#cpp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐