2010-11-29 112 views
12

在Android NDK下,有沒有睡眠()函數睡眠X毫秒,但不阻止事件循環?Android NDK有睡眠()函數嗎?

我們正在編寫API測試以適用於Mac,Windows和Android。到目前爲止,我們已經爲Mac和Windows實現了某種睡眠(),但我們都是Android NDK的新手,需要一些幫助。先謝謝你。

回答

10

所以,你正在尋找一個sleep()方法確實睡了一定的時間,但不會阻止事件循環?這聽起來很奇怪。我想你可能想用一個新的線程來調用sleep()方法 - 而不必使用任何JNI。

0

您可以使用[Handler.postDelayed] [1]計劃Runnable在設定的時間後運行,事件循環將在此期間繼續運行。

[1]:http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,長)

+0

+1,基於調度定時事件可能是真正問題的正確答案 – 2010-11-29 22:17:41

+0

這是用Java編寫的Android應用程序的正確方法。但是Hai想知道如何在C++程序中入睡,而不會阻塞只能使用多線程才能完成的程序。 – mreichelt 2010-11-30 10:19:41

2

正常的linux睡眠函數(usleep等)會阻塞調用它們的線程。這取決於你是哪個線程 - 希望不是UI。

更多的Android風格的方法是設置一個事件發生在未來的時間,然後從當前事件返回。當新事件發生時,您需要採取下一步。以一個狀態機爲例,每個狀態都作爲一個事件輸入,有效地執行一些事情,爲將來的時間安排下一個狀態,然後返回。

6

談到@mreichelt commment到一個答案:

是有一個sleep(seconds)功能。

1.增加#include <unistd.h>

  • 呼叫:sleep(seconds)usleep(microseconds)
  • 注:一微秒(我們或希臘字母畝加s)爲百萬分之一(10 -6)秒,而一毫秒(毫秒或毫秒)是千分之一秒

    1

    是 它是在unistd.h中定義的但是要小心,睡眠函數沒有標準化,所以在windows中定義sleep ` 上linux`

    int sleep(unsigned int seconds); 
    int usleep(useconds_t useconds); 
    

    usleep窗口

    sleep(int millisenconds); 
    

    需要微秒,其中睡眠需要幾秒鐘。 1秒= 1 * 1000 * 1000