Я использую AudioSessionSetActive
(истина) и AudioSessionSetActive
(ложь) для установки для AudioSession
значения true или false в приложении iOS.
В любой пункт я хочу узнать, активен ли сеанс или нет. Есть ли способ сделать это?
В настоящее время я пишу многопоточное приложение с использованием 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-лет в качестве работы. Так что если это не правильный способ использования событий, инициируемых пользователем, я хотел бы знать, как это делается.