Эти флаги - битмаски . Я писал об этом однажды давным-давно здесь, на SO .
Итак, в основном, чтобы использовать более одного варианта, вам нужно или их вместе
json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
Вы почти там. Используйте прием "самоканала" . Откройте канал, добавьте его к Вашему select()
чтение и запись fd_set
, запишите в него от основного потока для разблокирования рабочего потока. Это портативно через системы POSIX.
я видел вариант подобной техники для Windows в одной системе (на самом деле используемый вместе с методом выше, разделенный #ifdef WIN32
). Разблокирование может быть достигнуто путем добавления, что макет (развязал) сокет дейтаграммы к fd_set
и затем закрыв его. Оборотная сторона - то, что, конечно, необходимо вновь открыть его каждый раз.
Однако в вышеупомянутой системе, оба из этих методов используются скорее экономно, и для неожиданных событий (например, сигналы, запросы завершения). Предпочтительный метод является все еще переменным тайм-аутом к select()
, в зависимости от того, как скоро что-то планируется для рабочего потока.
Используя канал, а не сокет является немного более чистым, поскольку нет никакой возможности для другого процесса, чтобы овладеть им и испортить вещи.
Используя сокет UDP определенно создает потенциал для случайных пакетов, чтобы войти и вмешаться.
неименованный канал никогда не будет доступен никакому другому процессу (если Вы не дадите его ему).
Вы могли также использовать сигналы, но в многопоточной программе Вы захотите удостовериться, что все потоки за исключением того, который Вы хотите, имеют тот замаскированный сигнал.