各位论坛的兄弟姐妹,我正在用Vs2008编一个东西,用到了计时器。大概代码如下:
CXXXDoc::OnGameNew()
{
...
m_nTimerID = SetTimer(pView->GetSafeHwnd(), 1, 2000, CountDownFunc);
代码A
}
void CALLBACK CXXXDoc::CountDownFunc(HWND hwnd ,UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
if()
{
...
}
else
{
KillTimer(hwnd,idEvent);
}}
我想在计时器结束以后开始执行代码A,请问代码A应该添加在什么地方(不能添加在KillTimer函数后面)。按照上面的写法肯定不行,计时器还没结束,代码A就开始执行了。问问各位朋友有没有什么好办法,麻烦告诉我一下。先谢谢了。
CXXXDoc::OnGameNew()
{
...
m_nTimerID = SetTimer(pView->GetSafeHwnd(), 1, 2000, CountDownFunc);
代码A
}
void CALLBACK CXXXDoc::CountDownFunc(HWND hwnd ,UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
if()
{
...
}
else
{
KillTimer(hwnd,idEvent);
}}
我想在计时器结束以后开始执行代码A,请问代码A应该添加在什么地方(不能添加在KillTimer函数后面)。按照上面的写法肯定不行,计时器还没结束,代码A就开始执行了。问问各位朋友有没有什么好办法,麻烦告诉我一下。先谢谢了。
解决方案 »
- 求助BasicExcel的使用方法
- 问个菜菜的问题:编辑框的字体大小如何传递?
- 对屏幕截图后如何进行分块处理
- Windows系统下的按名称排序算法怎么实现
- QueryInterface的实现编译通不过
- 我创建了一个MFC小程序,创建时我设置的是共享dll,后来我想让它在别的计算机上运行,在“工程”->“设置”里面选择静态->确认,编译后,生成的文件还是共享dll的,怎么解决?
- 跪求CStringlist问题
- 有那位大侠用过OpenGL performer?进来指教一下小弟吧!分数多的是!
- 新建Dialog如何显示???????????
- VC中怎么样利用数学函数?
- 在mfc中,如何定义一个l类的函数指针,怎样使用一个类里面的函数指针
- 从CButton派生出自绘按钮类CBtmpbutton在单文档视类窗口中Create后,编译运行时显示了该按钮的程序窗口一闪即过?
================
楼主的想法有问题,windows是消息触发的,一般来说不需要用到上面这样的功能,不过一定要实现也可以,加一个bool变量,在A中判断,而在KillTimer后面对这个布尔值给TRUE值。
{
KillTimer(hwnd,idEvent);
}
在次发送一条消息去执行A代码
不过我搞不明白为什么不能把A代码放在killTimer后面
{
...
m_nTimerID = SetTimer(1,1000,NULL);
}
void CXXXDoc::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent==1)
{
KillTimer(1);//如果只执行一次代码A 的话 代码A
}
CFormView::OnTimer(nIDEvent);
}
wltg2001 说我的想法有问题,windows是消息触发的,你有什么好主意吗?是不是在KillTimer后给系统发送消息,把代码A放在消息响应函数中执行?
{
CreateEvent(..);
...
m_nTimerID = SetTimer(pView->GetSafeHwnd(), 1, 2000, CountDownFunc);
if(WaitForSingleObject(...)) //等到了信号,开始执行
{
代码A
}
}
void CALLBACK CXXXDoc::CountDownFunc(HWND hwnd ,UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
if()
{
...
SetEvent(...); //执行完毕,修改一个信号
}
else
{
KillTimer(hwnd,idEvent);
} }
在ONTIMER里面用SWITCH CASE。http://www.erbiano.cn
你可以线程函数声明为友元形式的,enmu GameStatus
{ UNKNOW = 0,
G_RUN,
G_END
}CXXXDoc::OnGameNew()
{
...
m_nTimerID = SetTimer(pView->GetSafeHwnd(), 1, 2000, CountDownFunc);
m_runStaus = G_RUN;
//创建线程 FucA
}
void CALLBACK CXXXDoc::CountDownFunc(HWND hwnd ,UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
if()
{
...
}
else
{
KillTimer(hwnd,idEvent);
m_runStaus = G_END;//结束状态.
}
}
FucA(LPVOID pParam)//声明为友元
{
CXXXDoc * PDoc = (CXXXDoc)pParam
while(PDoc->m_runStatus == G_END)
{
//修改后的 代码A
}
}
biweilun的回复我现在仔细看了,觉得这也是一个解决办法,谢谢啦。