2010-11-29 5 views
12

Gibt es unter Android NDK eine Schlaf() -Funktion, die für X Millisekunden schläft, aber die Ereignisschleife nicht blockiert?Gibt es eine Funktion sleep() für Android NDK?

Wir schreiben API-Tests für Mac, Windows und Android. Bis jetzt haben wir eine Art von sleep() für Mac und Windows implementiert, aber wir sind alle neu in Android NDK und brauchen dort Hilfe. Vielen Dank im Voraus.

Antwort

10

So Sie suchen ein sleep() Verfahren, die für eine gewisse Zeit, Schlaf tut, aber nicht blockiert die Ereignisschleife? Das klingt komisch für mich. Ich denke, Sie könnten stattdessen einen neuen Thread verwenden und die Methode sleep() dort aufrufen - ohne JNI verwenden zu müssen.

+0

Ich sollte klarer sein: Ich möchte schlafen, aber nicht * andere * Prozesse blockieren. Mein eigener Prozess sollte blockiert werden. –

+2

Sie * können andere Prozesse nicht blockieren. Sie sind ... andere Prozesse. Sie sind nicht davon abhängig, dass du rennst. Das heißt, die Verwendung von sleep() in einer Ereignisschleife ist ein starker Hinweis darauf, dass etwas kaputt gegangen ist. – hackbod

+0

Das zeigt, wie grün ich auf dieser Plattform bin. Also, gibt es eine Schlaf() Funktion für Android? –

0

Sie können [Handler.postDelayed] [1] verwenden, um zu planen, dass ein Runnable nach einer festgelegten Zeit ausgeführt werden kann. Die Ereignisschleife wird in der Zwischenzeit weiterhin funktionieren.

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

+0

+1, auf der Grundlage, dass die Planung eines zeitgesteuerten Ereignisses ist wahrscheinlich die richtige Antwort auf die eigentliche Frage –

+0

Es ist der richtige Ansatz für Android-Apps in Java geschrieben. Aber Hai wollte wissen, wie man in einem C++ Programm schläft, ohne das Programm zu blockieren, was nur mit mehreren Threads möglich ist. – mreichelt

2

Die normalen Linux-Schlaffunktionen (usleep, etc) blockieren den Thread, der sie aufruft. Es liegt an Ihnen, welcher Thread das ist - hoffentlich nicht der UI.

Ein Android-Stil Ansatz wäre, ein Ereignis zu einem zukünftigen Zeitpunkt und dann von dem aktuellen Ereignis zurückzukehren. Wenn das neue Ereignis ausgelöst wird, machen Sie den nächsten Schritt. Denken Sie zum Beispiel an eine Zustandsmaschine, bei der jeder Zustand als ein Ereignis eingegeben wird, etwas effektiv sofort ausgeführt wird, der nächste Zustand für eine zukünftige Zeit geplant wird und dann zurückkehrt.

6

Drehen @mreichelt commment in eine Antwort:

Ja, es ist eine sleep(seconds) Funktion.

1.Add #include <unistd.h>

  1. Call: sleep(seconds) oder usleep(microseconds)

Anmerkung: Eine Mikrosekunde (us oder griechische Buchstaben mu + m) ist ein Million (10 -6) einer Sekunde, während eine Millisekunde (ms oder msec) ein Tausendstel einer Sekunde ist

1

JA es ist in unistd.h definiert Aber sei vorsichtig Schlaf-Funktion ist nicht standardisiert, so auf Windows-Schlaf, die in definiert ist ` auf Fenster

sleep(int millisenconds); 

auf linux`

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

usleep nimmt Mikrosekunden, wo Schlaf Sekunden dauert. 1 Sekunde = 1 * 1000 * 1000

Verwandte Themen