<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: cancel select / kqueue</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html</link>
    <description>Есть НЕосновной поток, который спит на select / kevent ожидая прихода данных на сокет.&lt;br&gt;Тут основной поток решает что пора программе завершаться. Как разбудить поток, который слушает сокет, чтобы поток мог корректно завершиться.&lt;br&gt;&lt;br&gt;В венде делаю так:&lt;br&gt;&lt;br&gt;thread () &#123;&lt;br&gt;  .....&lt;br&gt;  while (1) &#123;&lt;br&gt;    dw_res = WaitForMultipleObjects(&#091;socket, shutdown_event&#093;,....);&lt;br&gt;    if (0 == dw_res) &#123; // сообщение от сокета&lt;br&gt;      // смотрим что там пришло&lt;br&gt;    &#125;&lt;br&gt;    else if (1 == dw_res) &#123; // сработало событие завершения&lt;br&gt;      // удаляем выделенное&lt;br&gt;      // закрываем открытое&lt;br&gt;      break;&lt;br&gt;    &#125;&lt;br&gt;  &#125;&lt;br&gt;  .....&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;main () &#123;&lt;br&gt;  ....&lt;br&gt;  // стартуем поток thread()&lt;br&gt;  .....&lt;br&gt;  .....&lt;br&gt;  SetEvent(shutdown_event); // сигналим потоку(ам) чтобы просыпались и завершались&lt;br&gt;  // ждем завершения потока&lt;br&gt;  // выходим&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Знаю что можно с помощью сигналов с kqueue. А без сигналов есть способ?&lt;br&gt;Сигналы, если что, меня ничем не неустраивают :) просто интересно, есть ли еще способо.&lt;br&gt;</description>

<item>
    <title>cancel select / kqueue (Michelnok)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#8</link>
    <pubDate>Sun, 31 Jan 2010 20:28:51 GMT</pubDate>
    <description>&amp;gt;Есть НЕосновной поток, который спит на select / kevent ожидая прихода данных &lt;br&gt;&amp;gt;на сокет. &lt;br&gt;&amp;gt;Тут основной поток решает что пора программе завершаться. Как разбудить поток, который &lt;br&gt;&amp;gt;слушает сокет, чтобы поток мог корректно завершиться. &lt;br&gt;&lt;br&gt;Закрыть соответствующий сокет?&lt;br&gt;</description>
</item>

<item>
    <title>cancel select / kqueue (BigHO)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#7</link>
    <pubDate>Sat, 30 Jan 2010 13:37:05 GMT</pubDate>
    <description>&amp;gt;Так и есть, проверил. Если поток1 находится в ожидании на kevent и &lt;br&gt;&amp;gt;из другого потока вызвать pthread_cancel(поток1), то поток1 просыпается. &lt;br&gt;&lt;br&gt;и тут же умирает... вот такая селяви. Вообще первый вариант (с pipe или socketpair) по сравнению с pthread_cancel будет +100. pthread_cancel вообще лучше не использовать, если core dump не хочется.&lt;br&gt;</description>
</item>

<item>
    <title>cancel select / kqueue (from_mars)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#6</link>
    <pubDate>Sat, 16 Jan 2010 03:04:36 GMT</pubDate>
    <description>Так и есть, проверил. Если поток1 находится в ожидании на kevent и из другого потока вызвать pthread_cancel(поток1), то поток1 просыпается.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>cancel select / kqueue (jd)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#5</link>
    <pubDate>Fri, 15 Jan 2010 00:38:36 GMT</pubDate>
    <description>Не знаю, что такое kevent, но по идее все системные вызовы, которые &quot;чего-то ждут&quot; должны быть cancellation point&apos;ами.&lt;br&gt;</description>
</item>

<item>
    <title>cancel select / kqueue (from_mars)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#4</link>
    <pubDate>Thu, 14 Jan 2010 23:38:13 GMT</pubDate>
    <description>&amp;gt;Если вы используете POSIX threads, то pthread_cancel(3). &lt;br&gt;&lt;br&gt;Спасибо. Почитал. &lt;br&gt;Интересно kevent является cancellation point-ом во FreeBSD? В мане среди select, poll и прочего, kevent нет.  Надо проверить.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>pipe? (from_mars)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#3</link>
    <pubDate>Thu, 14 Jan 2010 22:51:41 GMT</pubDate>
    <description>&amp;gt;добавить трубу в список дескрипторов, на которых висит селект,будить через запись. &lt;br&gt;&lt;br&gt;Кстати вариант. :)&lt;br&gt;Спасибо.&lt;br&gt;</description>
</item>

<item>
    <title>cancel select / kqueue (jd)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#2</link>
    <pubDate>Thu, 14 Jan 2010 16:14:51 GMT</pubDate>
    <description>Если вы используете POSIX threads, то pthread_cancel(3). Почитайте документацию по вашей системе и поэкспериментируйте: у меня в мане написано что-то мутное, что-то про неполное соответствие Linux-реализации стандарту, но по идее должно работать.&lt;br&gt;</description>
</item>

<item>
    <title>pipe? (Вова)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8589.html#1</link>
    <pubDate>Thu, 14 Jan 2010 10:11:35 GMT</pubDate>
    <description>добавить трубу в список дескрипторов, на которых висит селект,будить через запись.&lt;br&gt;</description>
</item>

</channel>
</rss>
