简单线程问题!急!解决即结帖!
问题如下:
class a{
void start();
void play();
volatile long l;
onpaint();//callback function every 10s
};
void a::start()
{
l=0
HANDLE hThread;
DWORD ThreadId;
hThread=CreateThread(NULL,0,
(unsigned long(_stdcall*)(void*))ThreadFunc,this,0,&ThreadId);
CloseHandle(hThread);
}
DWORD WINAPI ThreadFunc(a* ptr)
{
ptr->Play(ptr);
return 0;
}
void a::play(a* ptr)
{
for(;;)
{
Sleep(10);
if(l==10)//l永远为0,永远不会为10?????????为什么????????
MessageBox("l is 100!");
}
}
void a::onpaint()
{
l=10;
}
问题点数:50、回复次数:7Top
1 楼xxhfortrue(红叶)回复于 2004-09-04 12:47:42 得分 10
你onpaint没有被执行吧?Top
2 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-09-04 12:51:48 得分 20
在你的线程函数ThreadFunc中调用一下onpaint函数Top
3 楼weiziyuner(烂人)回复于 2004-09-04 13:00:29 得分 0
onpaint函数是系统隔10S调用一次的Top
4 楼sevenking(人类之逍遥)回复于 2004-09-04 13:09:35 得分 10
你加入进去试试!?
Top
5 楼weiziyuner(烂人)回复于 2004-09-04 13:21:03 得分 0
但如果
void a::onpaint()
{
l+=10;
}
而onpaint是每10S由系统调用的,那么创建的线程中读取的l会变化么?
Top
6 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-05 09:58:14 得分 10
unsigned long(_stdcall*)(void*))这又是为何?Top
7 楼weiziyuner(烂人)回复于 2004-09-06 13:02:38 得分 0
自己解决了,结帖!Top




