浏览MoreWindows的文章写出来的
http://blog.csdn.net/morewindows/article/details/7392749
#include <stdio.h>
#include <process.h>
#include <windows.h>
unsigned int __stdcall Fun(void *pPM);
const int THREAD_NUM = 1;
//循环次数
const int LOOP = 6;
//两个互斥事件
HANDLE g_hThreadEvent1;
HANDLE g_hThreadEvent2;
int main()
{
printf("\t子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环10 次,\n接着再回到主线程又循环 100 次,如此循环50次\n");
int i = 0 , j;
HANDLE hdl[THREAD_NUM];
g_hThreadEvent1 = CreateEvent(NULL,FALSE,FALSE,NULL);
g_hThreadEvent2 = CreateEvent(NULL,FALSE,TRUE,NULL);
hdl[0] = (HANDLE)_beginthreadex(NULL,0,Fun,NULL,0,NULL);
for( i = 0 ; i < LOOP; i++)
{
WaitForSingleObject(g_hThreadEvent1,INFINITE);
for(j = 0 ; j<4; j++)
{
printf(" 主要线程编号是 ,在循环第 %d 次\n",j+1);
}
SetEvent(g_hThreadEvent2);
Sleep(200);
}
CloseHandle(g_hThreadEvent2);
CloseHandle(g_hThreadEvent1);
for (i = 0; i < THREAD_NUM; i++)
CloseHandle(hdl[i]);
return 0;
}
unsigned int __stdcall Fun(void *pPM)
{
int num = 0;
int i = 0;
for( i = 0 ; i< LOOP;i++)
{
WaitForSingleObject(g_hThreadEvent2,INFINITE);
for(num = 0;num < 2 ; num++)
{
printf(" 线程编号是 %d ,在循环第 %d 次\n",GetCurrentThreadId(),num+1);
}
SetEvent(g_hThreadEvent1);
}
return 0;
}
第二题:我觉得有汇编基础的人应该能很快知道答案是50 -100
一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围。
inttally = 0;//glable
voidThreadProc()
{
for(inti = 1; i <= 50; i++)
tally += 1;
}