Boost Asio deadline_timer en el dispositivo Android no se disparó en el momento de expiración, pero en un momento posterior del tiempo
Estamos tratando de utilizar boost asio deadline_timers en un dispositivo android. Tenemos un requisito donde necesitamos disparar un temporizador cada 100 ms. He utilizado el código de la siguiente manera. Sin embargo, el temporizador parece ser disparado cada 1 segundo. ¿Qué debemos afinar en el sistema Android para el impulso de temporizador de plazo de asio para funcionar como se espera?
Nota: el código siguiente funciona como se espera en un sistema Linux estándar. ¿Qué hace que funcione de manera diferente en un sistema Andorid?
- Se produjo un error al agregar a la tabla ref de matrices JNI fijada (1024 entradas)
- Obtener Android NDK r9d para tener C + + 11 de apoyo
- ¿Para dividir un círculo en diferentes regiones para un tablero de dardos?
- ¿Es posible realizar llamadas de OpenGL ES desde su código C ++ y Java?
- ¿Cómo habilitar C ++ 11 para Android Studio?
Código :
void print(asio::deadline_timer* ptimer, const asio::error_code& err) { struct timeval tval; if(0 == gettimeofday(&tval, NULL)) { std::cout <<" Timer... sec::microsec = "<<tval.tv_sec<<"::"<<tval.tv_usec<< std::endl; } else { std::cout <<" Timer... gettimeofday Error!" << std::endl; } ptimer->expires_from_now(boost::posix_time::milliseconds(100)); ptimer->async_wait(boost::bind(&print, ptimer, asio::placeholders::error)); }
Salida en un dispositivo Android
Timer... sec::microsec = 1298328679::39207 Timer... sec::microsec = 1298328680::46773 Timer... sec::microsec = 1298328681::54624 Timer... sec::microsec = 1298328682::63861 Timer... sec::microsec = 1298328683::65740 Timer... sec::microsec = 1298328684::69301 Timer... sec::microsec = 1298328685::76500 Timer... sec::microsec = 1298328686::85768
- implementación del libra de libra (flotante, flotante) del kernel androide
- Android convierte matriz de bytes de la API de cámara para colorear objeto Mat openCV
- Cómo utilizar std :: this_thread :: yield () deterministically?
- Cargando la imagen codificada en Base64 en Cocos2d-x
- Integración de jpct-ae con el motor Vuforia de Qualcomm en android
- ¿Cómo llamar a la función con callbacks en Java como lo hago en C #?
- Una biblioteca para compresión / descompresión de vídeo sin pérdidas / bajo nivel de plataforma cruzada (C ++ / Android)
- Utilizar C ++ con Android ndk / jni
Es posible que desee asegurarse de que su entorno Android acabe teniendo BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK definido.
Si echa un vistazo a los timer_traits por defecto en boost/asio/time_traits.hpp
, verá que si esto no está definido, asio utilizará el segundo_clock como su temporizador.
Esta definición viene de boost/date_time/compiler_config.hpp
, condicional a BOOST_HAS_GETTIMEOFDAY o BOOST_HAS_FTIME . Dado su ejemplo, presumiblemente el primero debe ser definido.
No sé si android se considera su propia plataforma o si el impulso lo detecta como linux. En boost/config/platform/linux.hpp
se define como:
// // Si glibc es pasado la versión 2 entonces definitivamente tenemos // gettimeofday, las versiones anteriores pueden tener o no: // #if defined (__ GLIBC__) && (__GLIBC__> = 2) # Define BOOST_HAS_GETTIMEOFDAY #terminara si
Esto es probablemente donde usted quiere agregar una condición adicional para android.
- HttpURLConnection.getInputStream siempre lanza IOException en android 2.1
- Captura de vídeo de aplicaciones desde un dispositivo Android