информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[Win32] WaitForFckingObject 11.09.01 00:12  
Автор: зю Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Народ, мне надо чтобы один поток ждал событие в занятом состоянии, а другой - свободном (то же самое событие). Кто въехал - отвечайте.
[Win32] WaitForFckingObject 13.09.01 17:40  
Автор: хобгоблин Вася Статус: Незарегистрированный пользователь
<"чистая" ссылка>
- если пофигу в какой последовательности выполняются потоки, то
одним событием можно обойтись
HANDLE Event=CreateEvent(.....);
func1() // - first thread
{WaitForSingleObject(Event,);
...
SetEvent(Event);}
func2() //second thread - тоже самое
{WaitForSingleObject(Event,);
...
SetEvent(Event);}
---------------------------------------------------------
-если стого поочереди выполняются потоки, то одним событием не обойдешься (ИМХО)
2 события - одного ждем, другое ставим:

HANDLE Event1,Event2;
SetEvent(Event1); //at begining

func1() // первый поток
{wait (Event1)
...
setEvent(Event2)}
func2() // второй поток
{wait(Event2)
...
setEvent(Event1)}
Thanx! 14.09.01 04:00  
Автор: зю Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Да, спасибо, до второго варианта я уже сам доехал, вроде работает :)

Ситуация 2йцукенг : Один поток в цикле изменяет переменную, несколько потоков копируют эту переменную (внутри wait - set) и затем обрабатывают. Каждый поток должен получить свое уникальное значение переменной и все значения должны быть обработаны.
[Win32] WaitForFckingObject 11.09.01 11:36  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
> Народ, мне надо чтобы один поток ждал событие в занятом
> состоянии, а другой - свободном (то же самое событие). Кто
> въехал - отвечайте.

если я правильно понял, тебе нужно, чтобы один поток выполнялся после того как event станет сигнальным, а второй - после того как event станет не сигнальным
т.е. один из них обязательно будет выполняться сразу, а второй - ждать

ждать пока event перейдёт из сигнального состояние в несигнальное, кажется невозможно (я таких функций не встречал)

выход такой:
1) в этих потоках
do
{
WaitForSingleObject(event, INFINITE);
}
#ifdef THREAD1
while(flag);
#else
while(!flag);
#endif

2) в управляющей фукнции:

flag = true; // or =false
::PulseEvent(event);

желаю удачи :)

p.s.
не очень красивая ситуация;
два потока, из которых выполняется только один
может быть если чуть изменить логику программы, то от неё можно избавиться
<без заголовка> 13.09.01 17:03  
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка>
2 ggg:
> не очень красивая ситуация;
> два потока, из которых выполняется только один
вопрос был поставлен вовсе не так.
речь шла не о поочередной работе 2-х потоков, а о поочередной работе некоторых частей этих потоков.

2 зю:
скажи подробнее, зачем тебе это надо.
может, что-нибудь придумаем...
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach