[英]How to Run a Thread in an Infinite loop
在我的一个项目中,我需要同时运行两个操作(打开和关闭操作)(即并行/同时)。 我为各自的操作创建了两个线程,如下所示:
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或者连续运行,但不能同时运行。
请Sugest /指导我如何做到这一点..
谢谢。
将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);
}
问题是你在主线程本身内调用无限while(1)
循环,而不是在这些单独的线程中。 因此,只要在主线程上输入此无限时,它将继续运行它而不执行任何其他代码。
你应该将无限循环移动到它们各自的线程中,将整个代码包装在while循环中将允许它无限运行,但是与主线程分开。 因此,永远不会阻止主线程的执行。
:* D,你错过了,无限循环可以连接你的处理器使用你的计算机资源(RAM / mem / ..)。 后台工作者将被设计用于某些特定的长时间消耗任务,其工作就像无限循环一样。 因为它一直在继续工作,你的计算机,例如PnP设备可能无法在你的计算机上获得它们的支架; 他们被打倒了,你的计算机有时会自行冻结,直到正在运行的任务完成它的工作。 因此后台线程必须包含while循环而不是包含后台worker的while循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.