在很多時候,我們的程式,在執行下一步操作之前,需要等待上一步的執行完成,這種延時等待的方式在非同步操作,或者是利用訊息迴圈機制通訊的程式中,最為體現的明顯。
舉個api的例子:
我們自己的程式是a,需要利用api結合windows 訊息機制,控制外部程式b;
a向b傳送乙個訊息,b去執行,此時a需要等待b執行完後,根據b的執行結果,再次向b傳送下乙個訊息
上面的例子,是個很典型的延時應用。
說到延時,大家可能第一反應,就是 sleep 。
先不談 sleep 延時的精度如何,sleep 的乙個致命的弱點,就是 sleep 的過程中,程序是不能響應外部操作的,變成了假死狀態,這樣的話,乙個是使用者體驗很差,再者,使用者想中途終止也不行,只能幹等,或者強制 kill 掉程式。
所以,此時的sleep是不可取的。我們需要的,是乙個可以繼續響應操作,而且精度高的延時函式。
下面,我們自己實現乙個:
1.引用namespace
using system.runtime.interopservices;
2.引用api函式
[dllimport("kernel32.dll")]
private static extern uint gettickcount();
3.宣告延時函式
private void delay(uint ms)
}
4.呼叫delay函式(其中ms為毫秒)
private void button4_click(object sender, eventargs e)
C 延時函式 非Sleep
在很多時候,我們的程式,在執行下一步操作之前,需要等待上一步的執行完成,這種延時等待的方式在非同步操作,或者是利用訊息迴圈機制通訊的程式中,最為體現的明顯。舉個api的例子 我們自己的程式是a,需要利用api結合windows 訊息機制,控制外部程式b a向b傳送乙個訊息,b去執行,此時a需要等待b...
C 非獨佔延時函式 非Sleep
在c 視窗程式中,如果在主線程裡呼叫sleep,在sleep完成之前,介面呈現出假死狀態,不能響應任何操作 下邊實現的是非獨占性延時函式,延時過時中介面仍可響應訊息 public static void delay int millisecond 關於math.abs environment.tic...
再論sleep延時
在做通訊專案的時候需要處理不同執行緒的資料流匹配問題,在加入sleep second 延時函式後發現表現有點奇怪,仔細查閱api說明才了解到linux下sleep函式和windows下的不一樣!windows的sleep是毫秒延時,linux下是秒級延時,而且輸入浮點數後是向下取整 秒級延時函式,輸...