偽代碼如下:
想問下OnButton1里面,有什么方法能保證Start()陳述句執行完后(即OnTimer銷毀后)再自動運行下一陳述句GetSomething();?
往大神們解答下,小弟先謝謝啦
void CXXX::OnButton1
{
Start();
GetSomething();
}
void CXXX::Start()
{
SetTimer(1,50,NULL);
}
void CXXX::OnTimer(UINT_PTR nIDEvent)
{
Switch(nIDEvent)
{
case 1:
int flg;
flg=0;
flg=XXXXXXXXX;
if(!flg)
{
KillTime(1);
}
break;
}
CDialog::OnTimer(nIDEvent);
}
uj5u.com熱心網友回復:
方法很多:1. KillTime后直接呼叫GetSomething();
2.KillTimer后PostMessage給主框,由主框呼叫GetSomething();
3.把OnButton1的功能放到執行緒中去,
Thread_xxx()
{
Start();
Wait.....// 等待事件
GetSomething();
}
Killtimer后SentEvent通知執行緒
uj5u.com熱心網友回復:
用不著什么方法,因為程式都是順序執行的!
在OnButton1函式里,應用程式執行完Start函式,接著會執行GetSomething函式。
只要你函式寫的沒問題,但是你的函式寫的有很多問題,我給你說一個吧!
你的Start函式寫的就有問題?你應該直接呼叫SetTimer函式!
uj5u.com熱心網友回復:
你可以在killtimer以后再做你的處理uj5u.com熱心網友回復:
你的函式寫的本身就是錯的。點擊按鈕后執行順序是1、進入OnBotton1()
2、進入start()
3、執行settimer(),只是啟動定時器。定時器內的命令都沒執行。開始計時
4、GetSomething();先執行這個。
5、開始計時50ms后,執行定時器內的命令。
uj5u.com熱心網友回復:
你可以通過一個布爾變數來控制添加成員變數
BOOL m_Exit=false;
在OnTimer中
if(!flg)
{
KillTime(1);
m_Exit=TRUE;
}
//在OnButton1中
void CXXX::OnButton1
{
Start();
while(m_Exit==FALSE)
{
}
GetSomething();
}
uj5u.com熱心網友回復:
耗時的流程性的代碼, 最好是放到執行緒中, 想停幾秒停幾秒.在UI執行緒中就最好不要這么做了.
你想的功能是有辦法實作, 因為嵌入式開發中可能會經常使用這樣的方法. 因為沒有多執行緒的情況下, 就需要一個耗時的函式能分片執行.
而你想要的功能就需要這么做.
增加成員變數, 保存執行狀態.
首次呼叫OnButton1的時候(點擊按鈕的時候), 讓成員變數控制他只執行Start, 然后在定時器完成后再呼叫OnButton1(定時器中手動呼叫), 這時讓成員變數控制它只執行DoSomething()
uj5u.com熱心網友回復:
你可以把你的GetSomething();放到OnTimer()函式中即可。uj5u.com熱心網友回復:
你這個不能這么干,你應該:1、button1里面直接啟動定時器SetTimer(1,50,NULL);
2、start就不要了
3、直接在OnTimer()里面GetSomething();
uj5u.com熱心網友回復:
問題提的不夠清楚。Start()陳述句執行完成 與 Timer銷毀 根本就是兩碼事。
uj5u.com熱心網友回復:
start瞬間就完成了,get something執行時,timer還未執行。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/126405.html
標籤:基礎類
上一篇:VC和組態軟體
