#include <Windows.h>
#include <iostream>
using namespace std;DWORD WINAPI FunThread1(LPVOID lpParam);
DWORD WINAPI FunThread2(LPVOID lpParam);int g_iTicket = 100;
CRITICAL_SECTION g_cs;void main()
{
//线程1
HANDLE hThread1 = NULL;
hThread1 = CreateThread(NULL,0,FunThread1,NULL,0,NULL);
if(NULL != hThread1)
{
CloseHandle(hThread1);
} //线程2
HANDLE hThread2 = NULL;
hThread2 = CreateThread(NULL,0,FunThread2,NULL,0,NULL);
if(NULL != hThread2)
{
CloseHandle(hThread2);
} cout<<"main is end"<<endl; InitializeCriticalSection(&g_cs);
Sleep(10000);
DeleteCriticalSection(&g_cs);}//线程1
DWORD WINAPI FunThread1(LPVOID lpParam)
{
while (TRUE)
{
EnterCriticalSection(&g_cs);
Sleep(1);
if( g_iTicket > 0 )
{
Sleep(1);
cout<<"线程1 "<<"iTicket = "<<g_iTicket<<endl;
g_iTicket--;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}//线程2
DWORD WINAPI FunThread2(LPVOID lpParam)
{
while (TRUE)
{
EnterCriticalSection(&g_cs);
Sleep(1);
if( g_iTicket > 0 )
{
Sleep(1);
cout<<"线程2 "<<"iTicket = "<<g_iTicket<<endl;
g_iTicket--;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
不知道为什么就是要报错WIN32控制台程序的
谢谢帮忙!
解决方案 »
- 在VS2008中的MFC,怎么把编辑框中的文字写入一个TXT
- vc console程序中是否能调用WIN32的API函数呢?
- Cdialog无法在tab control 中完全显示
- 怎样VC在对话框内显示WORD内容
- vc 读取excel 用什么方法
- 怎么把非阻塞设为阻塞模式?
- 上海有两个软件公司密集的地方,浦东和徐汇,那个好些?
- VC中调用什么函数判断网页下载完成了,能给出代码的更好
- 如何读取和修改ini文件的内容啊?最好给个例子
- 进程,线程。STA,MTA ,COM 对象之间的关系?请讲解一下,举一个例子。谢谢
- MFC reateWindow中第9个参数如何设值?
- 关于矩形框与图像显示问题
DeleteCriticalSection(&g_cs);能保证线程都返回了吗?不然也会出错的。
#include <Windows.h>
#include <iostream>
using namespace std;DWORD WINAPI FunThread1(LPVOID lpParam);
DWORD WINAPI FunThread2(LPVOID lpParam);int g_iTicket = 100;
CRITICAL_SECTION g_cs;void main()
{
InitializeCriticalSection(&g_cs); HANDLE hThread[2] = {0};
//Ïß³Ì1
hThread[0] = CreateThread(NULL,0,FunThread1,NULL,0,NULL);
if(NULL == hThread[0])
{
printf("Error 1");
DeleteCriticalSection(&g_cs);
return ;
}
//Ïß³Ì2
hThread[1] = CreateThread(NULL,0,FunThread2,NULL,0,NULL);
if(NULL == hThread[1])
{
printf("Error 2");
if(hThread[0])
{
WaitForSingleObject(hThread[0], INFINITE);
CloseHandle(hThread[0]);
}
DeleteCriticalSection(&g_cs);
}
cout<<"main is end"<<endl;
WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
CloseHandle(hThread[0]);
CloseHandle(hThread[1]); DeleteCriticalSection(&g_cs);
}//Ïß³Ì1
DWORD WINAPI FunThread1(LPVOID lpParam)
{
while (TRUE)
{
EnterCriticalSection(&g_cs);
Sleep(1);
if( g_iTicket > 0 )
{
Sleep(1);
cout<<"Ïß³Ì1 "<<"iTicket = "<<g_iTicket<<endl;
g_iTicket--;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}//Ïß³Ì2
DWORD WINAPI FunThread2(LPVOID lpParam)
{
while (TRUE)
{
EnterCriticalSection(&g_cs);
Sleep(1);
if( g_iTicket > 0 )
{
Sleep(1);
cout<<"Ïß³Ì2 "<<"iTicket = "<<g_iTicket<<endl;
g_iTicket--;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
CreateThread成功之后线程就开启了!不是等到你去sleep才开始