4

在我的一个项目中,我需要同时运行两个操作(打开和关闭操作)(即并行/同时)。我为各自的操作创建了两个线程,如下所示:

UINT MyThread1(LPVOID lParam)
{
 // code for Open Operation..
 // other stuffs...

 return(1);
}

UINT MyThread2(LPVOID lParam)
{
 //Code for Close Operation..
 //Other Stuffs..

return(1);
}

void CMyProject : OnbnClickedOpen()
{
   // Here am running OPen Operation Continously..
 while(1) {
 AfxBeginThread(MyThread1,0);
 }
 }

void CMyProject : onbnClickedClose()
{
  //Here am running Close Operation continously...
  while(1) {
  AfxBeginThread(MyThread2,0);
 }
}

这里无法连续运行线程。我试过这样的替代方法:

void CMyProject : OnbnClickedOpen()
{
   while( 1 )
   {
     //Code for Open Operation..
   }
 }

void CMyProject : onbnClickedClose()
{
  while(1)
  {
    //Code for Close Operation..
  }
}

有了这个,我可以连续运行打开操作或连续关闭操作,但不能同时运行两者。

请建议/指导我如何做到这一点..

谢谢。

4

3 回答 3

4

while循环移动到线程函数中:

UINT MyThread1(LPVOID lParam)
{
 // Here am running OPen Operation Continously..
 while(1) {
   // code for Open Operation..
   // other stuffs...
 }

 return(1);
}

UINT MyThread2(LPVOID lParam)
{
  //Here am running Close Operation continously...
  while(1) {
   //Code for Close Operation..
   //Other Stuffs..
  }

return(1);
}

void CMyProject : OnbnClickedOpen()
{
 AfxBeginThread(MyThread1,0);
}

void CMyProject : onbnClickedClose()
{
  AfxBeginThread(MyThread2,0);
}
于 2013-01-15T10:21:44.873 回答
0

问题是您while(1)在主线程本身中调用无限循环,而不是在这些单独的线程中。所以一旦你在主线程上进入这个无限,它将继续运行它而不执行任何其他代码。

您应该将无限循环移动到它们各自的线程中,将整个代码包装在 while 循环中将允许它无限运行,但与主线程分开。因此主线程的执行永远不会被阻塞。

于 2013-01-15T10:21:49.100 回答
0

:*D,你错过了,一个无限循环可能会占用你的处理器并消耗你的计算机资源(RAM/mem/..)。后台工作人员是为某些特定的耗时任务而设计的,其工作就像一个无限循环。因为它一直在继续它的工作,您计算机的例如 PnP 设备可能无法在您的计算机中获得它们的位置;它们被击倒,您的计算机有时会自行冻结,直到正在运行的任务完成其工作。因此,后台线程必须包含 while 循环,而不是包含后台工作程序的 while 循环。

于 2013-01-15T10:29:49.520 回答