Вы почти там. Используйте прием "самоканала" . Откройте канал, добавьте его к Вашему select()
чтение и запись fd_set
, запишите в него от основного потока для разблокирования рабочего потока. Это портативно через системы POSIX.
я видел вариант подобной техники для Windows в одной системе (на самом деле используемый вместе с методом выше, разделенный #ifdef WIN32
). Разблокирование может быть достигнуто путем добавления, что макет (развязал) сокет дейтаграммы к fd_set
и затем закрыв его. Оборотная сторона - то, что, конечно, необходимо вновь открыть его каждый раз.
Однако в вышеупомянутой системе, оба из этих методов используются скорее экономно, и для неожиданных событий (например, сигналы, запросы завершения). Предпочтительный метод является все еще переменным тайм-аутом к select()
, в зависимости от того, как скоро что-то планируется для рабочего потока.
Вот быстрая реализация с образцами:
Флажок для проверки всех объектов:
<input id="btnSelectAll" type="checkbox">
Единственный объект (для строки таблицы):
<input class="single-item" name="item[]" type="checkbox">
Js кодируют для jQuery:
$(document).on('click', '#btnSelectAll', function(state) {
if ($('#btnSelectAll').is(':checked')) {
$('.single-item').prop('checked', true);
$('.batch-erase').addClass('d-block');
} else {
$('.single-item').prop('checked', false);
$('.batch-erase').removeClass('d-block');
}
});
Пакет удаляют объект:
<div class="batch-erase d-none">
<a href="/path/to/delete" class="btn btn-danger btn-sm">
<i class="fe-trash"></i> Delete All
</a>
</div>