C++使用关键代码段问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 18:34:37
有这么一段程序关于多线程
#include <windows.h>
#include <iostream.h>

DWORD WINAPI Fun1Proc(LPVOID lpParameter);

DWORD WINAPI Fun2Proc(LPVOID lpParameter);

int tickets = 100;

CRITICAL_SECTION g_cs;

void main()
{
HANDLE hThread1;
HANDLE hThread2;

hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);

CloseHandle(hThread1);
CloseHandle(hThread2);

InitializeCriticalSection(&g_cs);
Sleep(4000);

DeleteCriticalSection(&g_cs);
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter ) // thread data
{
while(TRUE)
{
EnterCriticalSection(&g_cs);
Sleep(1);

cout<<"thread1 sell ticket : "<<tickets++<<endl;
LeaveCriticalSection(&g_cs);

}

return 0;
}

DWORD WINAPI Fun2P

呃...确实是在无限执行.

呵呵~ 楼主用的什么编译器啊.

4秒钟的时候 main函数会临近结束的
出现press any key to continue

但是另两个线程仍然在执行中.不断地COUT

只要press any key 令main函数结束后.程序就关闭了.

楼主看到的应该是这样的假象吧.
表面是在无限执行.实际上main函数在等待状态.

你说的不对。

首先你这个程序有问题,InitializeCriticalSection(&g_cs);
这一句应该放在main函数的前面,至少应该在创建两个线程之前,否则一旦线程运行了,你还没初始化关键代码段呢,这样关键代码段就没起作用了。

再次这个程序也不会无限执行下去,main函数只是等待4秒之后就退出了,main退了,两个线程也就结束了。

不可能,我试了下,运行了一会,出现press any key to continue不就结束了吗。。。

这段程序不是无限执行的
sleep(4000)之后,主程序退出,程序就退出了。

main函数那里可以无限执行啊,睡眠4秒钟就结束了。主线程在睡眠的过程中释放CPU使用权,接着交替执行2个线程,4秒后主线程恢复执行,程序终止,很正常吧,有什么不妥?