VC ++,在OnTimer中使用AfxBeginThread

时间:2014-12-12 02:44:36

标签: visual-c++ mfc

我想在OnTimer中使用AfxBeginThread,如下所示:

void CFrame::OnTimer(UINT nIDEvent)
{
  if(nIDEvent==definedid)
    funA();
    //funB();
}

bool CFrame::funA()
{
   m_pThreadExecute = AfxBeginThread(threadFun, &threadPar, ThreadPry);
}

bool CFrame::funB()
{
   //do something without thread
}

int threadFun(LPVOID lpVoid)
{ 
  //do something
}

我设置计时器1秒,如果我调用funB(),做一些没有线程的东西,这个计时器每秒运行一次,通常;如果我调用funA(),这个计时器只运行一次,我如何在OnTimer中使用AfxBeginThread? 谢谢!

1 个答案:

答案 0 :(得分:0)

AfxBeginThread,是吗? 您似乎使用MFC CWnd::SetTimer,但它只是Win32 API SetTimer的包装器。您可以尝试使用Win32 API SetTimer执行相同的操作,并尝试传递NULL而不是窗口句柄。如果再次调用此类SetTimer调用,则提供NULL窗口句柄会导致更换计时器。一个example

和/或您最好只使用不会打扰其他内容的Win32 API CreateThread

另一方面,你所做的似乎有点奇怪。是否需要始终启动新线程?如果没有,我们可能会想出一个替代方案。启动线程,特别是太多线程,没有实际需要通常是一种产生不必要的错误和复杂的方法。