Как узнать, активен ли аудиосеанс в iOS

Я использую AudioSessionSetActive (истина) и AudioSessionSetActive (ложь) для установки для AudioSession значения true или false в приложении iOS. В любой пункт я хочу узнать, активен ли сеанс или нет. Есть ли способ сделать это?

-121--1015555- Инициированное пользователем событие в libevent Я сейчас пишу многопоточное приложение с помощью libevent. Некоторые события запускаются IO, но мне нужна пара событий, которые запускаются через потоки самим кодом, используя...

В настоящее время я пишу многопоточное приложение с использованием libevent.

Некоторые события инициируются IO, но мне нужна пара событий, которые инициируются самим кодом, используя event_active ().

Я попытался написать простую программу, которая показывает, где моя проблема:

Событие создается с помощью event_new (), и fd имеет значение -1.

При вызове event_add (), если используется структура тайм-аута, событие в дальнейшем корректно обрабатывается event_base_dispatch.

Если вместо этого используется event_add (ev, NULL), он возвращает 0 (очевидно, успешно), но event_base_dispatch () возвращает 1 (что означает, что событие не было должным образом зарегистрировано.)

Это поведение можно проверить с помощью следующего кода и подстановкой event_add строк:

#include <event2/event.h>
#include <unistd.h>

void cb_func (evutil_socket_t fd, short flags, void * _param) {
  puts("Callback function called!");
}

void run_base_with_ticks(struct event_base *base)
{
  struct timeval one_sec;

  one_sec.tv_sec = 1;
  one_sec.tv_usec = 0;
  struct event * ev1;
  ev1 = event_new(base, -1, EV_PERSIST, cb_func, NULL);
  //int result = event_add(ev1, NULL);
  int result = event_add(ev1, &one_sec);
  printf("event_add result: %d\n",result);

  while (1) {
     result = event_base_dispatch(base);
     if (result == 1) {
       printf("Failed: event considered as not pending dispite successful event_add\n");
       sleep(1);
     } else {
       puts("Tick");
     }
  }
}

int main () {
  struct event_base *base = event_base_new();
  run_base_with_ticks(base);
  return 0;
}

Компиляция: g ++ sample.cc-levent

вещь, я не нуждаюсь в перерыве и не хочу использовать перерыв n-лет в качестве работы. Так что если это не правильный способ использования событий, инициируемых пользователем, я хотел бы знать, как это делается.

9
задан Quentin 4 October 2011 в 08:35
поделиться

0 ответов