예제 #1
0
static void data_thread_loop(void *data)
{
   data_runloop_t *runloop = (data_runloop_t*)data;

   RARCH_LOG("[Data Thread]: Initializing data thread.\n");

   slock_lock(runloop->lock);
   while (!runloop->thread_inited)
      scond_wait(runloop->cond, runloop->lock);
   slock_unlock(runloop->lock);

   RARCH_LOG("[Data Thread]: Starting data thread.\n");

   while (runloop->alive)
   {
      slock_lock(runloop->lock);

      if (!runloop->alive)
         break;

      data_runloop_iterate(true);

      while (!rarch_main_data_active())
         scond_wait(runloop->cond, runloop->lock);

      slock_unlock(runloop->lock);

   }

   RARCH_LOG("[Data Thread]: Stopping data thread.\n");
}
예제 #2
0
void rarch_main_data_iterate(void)
{
   data_runloop_t *runloop      = rarch_main_data_get_ptr();
   settings_t     *settings     = config_get_ptr();
   
   (void)settings;
#ifdef HAVE_THREADS
   if (settings->menu.threaded_data_runloop_enable)
   {
      switch (runloop->thread_code)
      {
         case THREAD_CODE_INIT:
            rarch_main_data_thread_init();
            break;
         case THREAD_CODE_DEINIT:
         case THREAD_CODE_ALIVE:
            break;
      }
   }
#endif

#ifdef HAVE_OVERLAY
   rarch_main_data_overlay_image_upload_iterate(false);
#endif
#ifdef HAVE_RPNG
   rarch_main_data_nbio_image_upload_iterate(false);
#endif
#ifdef HAVE_OVERLAY
   rarch_main_data_overlay_iterate    (false);
#endif

#ifdef HAVE_MENU
#ifdef HAVE_LIBRETRODB
   if (rarch_main_data_db_pending_scan_finished())
      menu_environment_cb(MENU_ENVIRON_RESET_HORIZONTAL_LIST, NULL);
#endif
#endif

   if (data_runloop_msg[0] != '\0')
   {
      rarch_main_msg_queue_push(data_runloop_msg, 1, 10, true);
      data_runloop_msg[0] = '\0';
   }

#ifdef HAVE_MENU
   menu_entries_refresh(MENU_ACTION_REFRESH);
#endif

#ifdef HAVE_THREADS
   if (settings->menu.threaded_data_runloop_enable && runloop->alive)
      return;
#endif

   data_runloop_iterate(false);
}
예제 #3
0
void rarch_main_data_iterate(void)
{
   settings_t     *settings     = config_get_ptr();
   
   (void)settings;
#ifdef HAVE_THREADS
   if (settings->threaded_data_runloop_enable)
   {
      switch (g_data_runloop.thread_code)
      {
         case THREAD_CODE_INIT:
            rarch_main_data_thread_init();
            break;
         case THREAD_CODE_DEINIT:
         case THREAD_CODE_ALIVE:
            break;
      }
   }
#endif

#ifdef HAVE_OVERLAY
   rarch_main_data_overlay_image_upload_iterate(false);
#endif
#ifdef HAVE_RPNG
#ifdef HAVE_MENU
   rarch_main_data_nbio_image_upload_iterate(false);
#endif
#endif
#ifdef HAVE_OVERLAY
   rarch_main_data_overlay_iterate    (false);
#endif

#ifdef HAVE_MENU
   rarch_main_data_menu_iterate();
#endif

   if (data_runloop_msg[0] != '\0')
   {
      rarch_main_msg_queue_push(data_runloop_msg, 1, 10, true);
      data_runloop_msg[0] = '\0';
   }

#ifdef HAVE_THREADS
   if (settings->threaded_data_runloop_enable && g_data_runloop.alive)
      return;
#endif

   data_runloop_iterate(false);
}
예제 #4
0
void rarch_main_data_iterate(void)
{
   data_runloop_t *runloop      = rarch_main_data_get_ptr();
   settings_t     *settings     = config_get_ptr();
   
   (void)settings;
#ifdef HAVE_THREADS
   if (settings->menu.threaded_data_runloop_enable)
   {
      switch (runloop->thread_code)
      {
         case THREAD_CODE_INIT:
            rarch_main_data_thread_init();
            break;
         case THREAD_CODE_DEINIT:
         case THREAD_CODE_ALIVE:
            break;
      }
   }
#endif

#ifdef HAVE_OVERLAY
   rarch_main_data_overlay_image_upload_iterate(false, runloop);
#endif
#ifdef HAVE_RPNG
   rarch_main_data_nbio_image_upload_iterate(false, runloop);
#endif

   if (data_runloop_msg[0] != '\0')
   {
      rarch_main_msg_queue_push(data_runloop_msg, 1, 10, true);
      data_runloop_msg[0] = '\0';
   }

#ifdef HAVE_MENU
   menu_do_refresh(MENU_ACTION_REFRESH);
#endif

#ifdef HAVE_THREADS
   if (settings->menu.threaded_data_runloop_enable && runloop->alive)
      return;
#endif

   data_runloop_iterate(false, runloop);
}