在我的一个项目中,我需要同时运行两个操作(打开和关闭操作)(即并行/同时)。我为这样的操作创建了两个线程:
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或者连续运行,但不能同时运行。
请摘要/指导我如何做到这一点..
感谢。
答案 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循环。