如何在无限循环中运行线程

时间:2013-01-15 10:18:00

标签: c++ mfc

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

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..
  }
}

有了这个,我可以连续运行Open Operation或者连续运行,但不能同时运行。

请摘要/指导我如何做到这一点..

感谢。

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

问题是你在主线程本身内调用无限while(1)循环,而不是在这些单独的线程中。因此,只要您在主线程上输入此无限值,它就会继续运行它而不执行任何其他代码。

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

答案 2 :(得分:0)

:* D,你错过了,无限循环可以连接你的处理器使用你的计算机资源(RAM / mem / ..)。后台工作者将被设计用于某些特定的长时间消耗任务,其工作就像无限循环一样。因为它一直在继续它的工作,你的计算机的例如PnP设备可能无法在你的计算机中获得它们的支架;他们被打倒了,你的计算机有时会自行冻结,直到正在运行的任务完成它的工作。因此后台线程必须包含while循环而不是包含后台worker的while循环。