[英]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.