#include<windows.h>
#include<stdio.h>
//声明线程函数
DWORD WINAPI myfun1(LPVOID lpParamer);
DWORD WINAPI myfun2(LPVOID lpParamer);
//定义全局变量并初始化
static int a1=0;
//定义临界区对象
CRITICAL_SECTION Section;
int main()
{
//创建线程句柄
HANDLE h1,h2;
//创建线程1
h1=CreateThread(NULL,0,myfun1,NULL,0,NULL);
printf("线程1开始运行\r\n");
//创建线程2
h2=CreateThread(NULL,0,myfun2,NULL,0,NULL);
printf("线程2开始运行\r\n");
//关闭线程句柄
CloseHandle(h1);
CloseHandle(h2);
//初始化临界区对象
InitializeCriticalSection(&Section);
Sleep(10000);
printf("正常退出程序按'q'\r\n");
if(getchar()=='q')
{
//删除临界区对象
DeleteCriticalSection(&Section);
}
else
{
return 0;
}
}
DWORD WINAPI myfun1(LPVOID lpParamer)
{
while(1)
{ //进入临界区
EnterCriticalSection(&Section);
a1++;
if(a1<100)
{
Sleep(1000);
printf("线程1正在计数%d\r\n",a1);
LeaveCriticalSection(&Section);
}
else
{
LeaveCriticalSection(&Section);
break;//跳出循环
}
}
return 0;
}
DWORD WINAPI myfun2(LPVOID lpParamer)
{
while(1)
{
EnterCriticalSection(&Section);
a1++;
if(a1<100)
{
Sleep(1000);
printf("线程2正在计数%d\r\n");
LeaveCriticalSection(&Section);
}
else
{
LeaveCriticalSection(&Section);
break;//跳出循环
}
}
return 0;
}
这是代码 编译也没啥问题 运用时总报内存不能写的错误 你大神帮忙看看
#include<stdio.h>
//声明线程函数
DWORD WINAPI myfun1(LPVOID lpParamer);
DWORD WINAPI myfun2(LPVOID lpParamer);
//定义全局变量并初始化
static int a1=0;
//定义临界区对象
CRITICAL_SECTION Section;
int main()
{
//创建线程句柄
HANDLE h1,h2;
//创建线程1
h1=CreateThread(NULL,0,myfun1,NULL,0,NULL);
printf("线程1开始运行\r\n");
//创建线程2
h2=CreateThread(NULL,0,myfun2,NULL,0,NULL);
printf("线程2开始运行\r\n");
//关闭线程句柄
CloseHandle(h1);
CloseHandle(h2);
//初始化临界区对象
InitializeCriticalSection(&Section);
Sleep(10000);
printf("正常退出程序按'q'\r\n");
if(getchar()=='q')
{
//删除临界区对象
DeleteCriticalSection(&Section);
}
else
{
return 0;
}
}
DWORD WINAPI myfun1(LPVOID lpParamer)
{
while(1)
{ //进入临界区
EnterCriticalSection(&Section);
a1++;
if(a1<100)
{
Sleep(1000);
printf("线程1正在计数%d\r\n",a1);
LeaveCriticalSection(&Section);
}
else
{
LeaveCriticalSection(&Section);
break;//跳出循环
}
}
return 0;
}
DWORD WINAPI myfun2(LPVOID lpParamer)
{
while(1)
{
EnterCriticalSection(&Section);
a1++;
if(a1<100)
{
Sleep(1000);
printf("线程2正在计数%d\r\n");
LeaveCriticalSection(&Section);
}
else
{
LeaveCriticalSection(&Section);
break;//跳出循环
}
}
return 0;
}
这是代码 编译也没啥问题 运用时总报内存不能写的错误 你大神帮忙看看
解决方案 »
- JPG图片 浏览和 从数据库读出 报错 unknown error 0x800a0e7d
- vista边栏程序,大家给点意见
- 求助!系统钩子中 取得键盘虚拟键值问题
- 请教:Windows XP 下 tab control的颜色,怎么拿到?
- 发布电子表格控件2.0版,可以免费使用。
- 求救!CFileDialog和将字符串写入磁盘的问题(急)
- CEDIT设置“改变”事件后,无法正常输入小数,为什么?
- 如何用MessageBox显示unsigned char?
- 简单问题,先到者有分!
- 求助!!!vc调用存储过程时传出的参数怎样得到???
- VS2008 多工程编译的问题求助
- VC中如何处理JPG文件,就像处理bmp那样,
InitializeCriticalSection(&Section);
这句放在建立线程前,还没建立这个临界区,线程就先用上了,这怎么不能出错
移到h1=CreateThread(NULL,0,myfun1,NULL,0,NULL);的前面