#include <stdio.h>
DWORD WINAPI myfun1( //声明线程函数
LPVOID lpParameter
);
DWORD WINAPI myfun2(
LPVOID lpParameter
);
int a=0;
CEvent event; //定义全局变量a
void main()
{
event=CEvent(false,false,NULL,NULL);
printf("事件对象\r\n");
HANDLE h1,h2; //定义线程句柄
event=::CreateEvent(NULL,FALSE,false,NULL);
event.SetEvent();
h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL); //创建线程1
printf("线程1开始运行!\r\n");
h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL); //创建线程2
printf("线程2开始运行!\r\n");
::CloseHandle(h1); //关闭线程句柄对象
::CloseHandle(h2);
::Sleep(100000); //程序睡眠10秒
return 0;
}
DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1
{
while(1)
{
::WaitForSingleObject(event.m_hObject,INFINITE); //请求事件对象
event.ResetEvent(); //设置事件对象为无信号状态
if(a<100000)
{
a+=1; //变量自加
::Sleep(1000); //线程睡眠1秒
printf("线程1:%d\r\n",a); //输出变量
event.SetEvent(); //设置事件对象为有信号状态
}
else
{
event.SetEvent(); //设置事件对象为有信号状态
break; //跳出循环
}
}
return 0; //线程
}
DWORD WINAPI myfun2(LPVOID lpParameter) //线程函数2
{
while(1)
{
::WaitForSingleObject(event.m_hObject,INFINITE); //请求事件对象
event.ResetEvent(); //设置事件对象为无信号状态
if(a<100000)
{
a+=1;
::Sleep(1000);
printf("线程2:%d\r\n",a); //输出变量
event.SetEvent();
}
else
{
event.SetEvent(); //设置事件对象为有信号状态
break; //跳出循环
}
}
return 0; //线程正常退出
}
7 个解决方案
#1
event=CEvent(false,false,NULL,NULL);
event=::CreateEvent(NULL,FALSE,false,NULL);
------------------------------------------------
这两句去掉,还有你的入口函数写的是void main,但你你最后写了return 0;要么去掉return 0;那么将void main改成int main
event=::CreateEvent(NULL,FALSE,false,NULL);
------------------------------------------------
这两句去掉,还有你的入口函数写的是void main,但你你最后写了return 0;要么去掉return 0;那么将void main改成int main
#2
ls的,CEvent 是ATL/MFC对event的包装
如果向后面那样调用的话,event要申明为HANDLE啊
如果向后面那样调用的话,event要申明为HANDLE啊
#3
event=::CreateEvent(NULL,FALSE,false,NULL);去掉
#4
去掉也还是一样的错误啊?另外1L所说的我都改过来也没用的
使用CEvent类编程.cpp
c:\documents and settings\administrator\桌面\03\使用cevent类编程\使用cevent类编程.cpp(11) : error C2146: syntax error : missing ';' before identifier 'event'
c:\documents and settings\administrator\桌面\03\使用cevent类编程\使用cevent类编程.cpp(11) : error C2501: 'CEvent' : missing storage-class or type specifiers
c:\documents and settings\administrator\桌面\03\使用cevent类编程\使用cevent类编程.cpp(11) : fatal error C1004: unexpected end of file found
#5
求解!!!!!!
#6
!!!!!!!!!!!!!!!!!!!!
#7
很混乱,一会MFC,一会API
MFC头文件都没有include,怎能使用CEvent?
MFC头文件都没有include,怎能使用CEvent?
#1
event=CEvent(false,false,NULL,NULL);
event=::CreateEvent(NULL,FALSE,false,NULL);
------------------------------------------------
这两句去掉,还有你的入口函数写的是void main,但你你最后写了return 0;要么去掉return 0;那么将void main改成int main
event=::CreateEvent(NULL,FALSE,false,NULL);
------------------------------------------------
这两句去掉,还有你的入口函数写的是void main,但你你最后写了return 0;要么去掉return 0;那么将void main改成int main
#2
ls的,CEvent 是ATL/MFC对event的包装
如果向后面那样调用的话,event要申明为HANDLE啊
如果向后面那样调用的话,event要申明为HANDLE啊
#3
event=::CreateEvent(NULL,FALSE,false,NULL);去掉
#4
去掉也还是一样的错误啊?另外1L所说的我都改过来也没用的
使用CEvent类编程.cpp
c:\documents and settings\administrator\桌面\03\使用cevent类编程\使用cevent类编程.cpp(11) : error C2146: syntax error : missing ';' before identifier 'event'
c:\documents and settings\administrator\桌面\03\使用cevent类编程\使用cevent类编程.cpp(11) : error C2501: 'CEvent' : missing storage-class or type specifiers
c:\documents and settings\administrator\桌面\03\使用cevent类编程\使用cevent类编程.cpp(11) : fatal error C1004: unexpected end of file found
#5
求解!!!!!!
#6
!!!!!!!!!!!!!!!!!!!!
#7
很混乱,一会MFC,一会API
MFC头文件都没有include,怎能使用CEvent?
MFC头文件都没有include,怎能使用CEvent?