使用智能手機工作室2.2.0.4165(測試版)使用與視覺控制應用的延遲(w3_setTimeOut)
我不知道如果我這樣做的權利,而這可能是因爲我只是不明白怎麼樣正確使用w3_TimeOut回調。
當我單擊開始按鈕時,以下代碼會鎖定。我的開始按鈕卡在向下的位置,程序鎖定。當我關閉程序時,我會得到一個「外部異常」。我必須重新啓動SMS才能做更多事情。我做錯了什麼?
procedure TForm1.StartClick(Sender: TObject);
var
i: integer;
begin
//initialize variable
fRunning:= true;
repeat
//get a random light (1-4) and add to array
fLights.Add(RandomInt(4)+1);
//step through lights array and light up each light
for i:= 0 to fLights.Count-1 do
begin
LightUp(fLights[i]);
//add a delay after each
w3_setTimeOut(procedure()
begin
//shut down light
LightDwn(fLights[i]);
end, 200);
end; //for
until not fRunning;
end;
procedure TForm1.StopClick(Sender: TObject);
begin
//reset variable
fRunning:= false;
//clear all lights in array
fLights.Clear;
end;
I even tried
w3_callback(procedure()
begin
LightDwn(fLights[i]);
end, 200);
如果我不使用延遲,而是,還挺有演出消息延遲它,它的工作原理完全一樣,我需要它太(當然,我不能用show消息雖然)
procedure TForm1.StartClick(Sender: TObject);
var
i: integer;
begin
//initialize variable
fRunning:= true;
repeat
//get a random light (1-4) and add to array
fLights.Add(RandomInt(4)+1);
//step through lights array and light up each light
for i:= 0 to fLights.Count-1 do
begin
LightUp(fLights[i]);
ShowMessage('Up: ' + intToStr(fLights[i]));
LightDwn(fLights[i]);
ShowMessage('Down: ' + intToStr(fLights[i]));
end; //for
until not fRunning;
end;
一個簡單的測試表明,w3_TimeOut不是阻塞例程 eg
procedure TForm1.W3Button1Click(Sender: TObject);
var
I: Integer;
begin
for I:= 1 to 99 do
begin
w3_setTimeOut(procedure()
begin
//shut down light
W3Label1.Caption:= IntToStr(I);
end, 1000);
end;
標籤沒有更新,直到循環完成
我甚至嘗試刷新表格和標籤之後
w3_setTimeOut(procedure()
begin
//shut down light
W3Label1.Caption:= IntToStr(I);
W3Label1.Invalidate;
//self.Invalidate;
end, 1000);
但是,我不認爲我連我這樣做正確
經過一番搜索,我在SmartCL.Time中找到了TW3EventRepeater。
然而,似乎它的工作原理完全一樣既w3_setTimeOut和w3_callback
我該怎麼做一些代碼後等待(),然後在等待期滿後,做一些更多的代碼。它一定是阻塞等待?
感謝名單
答:
fTimer:= TW3Timer.Create;
fTimer.Delay:= 1000;
fTimer.OnTime:= HandleTimer;
fTimer.Enabled:= True;
謝謝!我終於想出瞭如何使用TW3EventRepeater和TW3Timer。我已經用我的解決方案更新了這個問題 – JakeSays
但是,我仍然對知道如何使用以及何時使用以下內容感興趣:w3_SetTimeOut(),w3_ClearInterval(); w3_SetInterval – JakeSays
這些是你想要執行的事情「在一點點」。比如說,proc退出後的幾個ms。像這樣: Procedure TForm1。東西; begin //做某事 w3_callback(procedure() begin showmessage(「done」); end,100); 結束; 在上面,showmessage在w3_callback被調用後100毫秒執行。在通話之間給你一些空氣。 非常適合做清理,或啓用/禁用的東西。 –