Куда прикрутить Thread-ы ??
От: Serge Чехия  
Дата: 25.10.01 12:28
Оценка:
Всем привет!

Подскажите, как решить вот такую проблемму:
В компоненте создаю несколько рабочих потоков. Потом при окончании работы компонента где лучше ожидать завершения работы потоков ?
Как вообще правильно надо работать с потоками в компоненте?
Re: Куда прикрутить Thread-ы ??
От: OlegO Россия http://www.mediachase.ru
Дата: 26.10.01 05:52
Оценка:
Здравствуйте Serge, Вы писали:

S>Всем привет!


S>Подскажите, как решить вот такую проблемму:

S>В компоненте создаю несколько рабочих потоков. Потом при окончании работы компонента где лучше ожидать завершения работы потоков ?
S>Как вообще правильно надо работать с потоками в компоненте?

Вариантов много, все зависит от того что делают потоки.
Ну можно в FinalRelease(...)
С уважением, OlegO.
Re[2]: Куда прикрутить Thread-ы ??
От: Serge Чехия  
Дата: 26.10.01 06:51
Оценка:
Здравствуйте OlegO, Вы писали:

OO>Здравствуйте Serge, Вы писали:


S>>Всем привет!


S>>Подскажите, как решить вот такую проблемму:

S>>В компоненте создаю несколько рабочих потоков. Потом при окончании работы компонента где лучше ожидать завершения работы потоков ?
S>>Как вообще правильно надо работать с потоками в компоненте?

OO>Вариантов много, все зависит от того что делают потоки.

OO>Ну можно в FinalRelease(...)

Потоки работают с serial-портами и возможны ситуации когда они будут заблокированы на пару секунд. Как в таком случае ожидать их завершения?
Re[3]: Куда прикрутить Thread-ы ??
От: Аноним  
Дата: 26.10.01 08:35
Оценка:
Здравствуйте Serge, Вы писали:

S>Здравствуйте OlegO, Вы писали:


OO>>Здравствуйте Serge, Вы писали:


S>>>Всем привет!


S>>>Подскажите, как решить вот такую проблемму:

S>>>В компоненте создаю несколько рабочих потоков. Потом при окончании работы компонента где лучше ожидать завершения работы потоков ?
S>>>Как вообще правильно надо работать с потоками в компоненте?

OO>>Вариантов много, все зависит от того что делают потоки.

OO>>Ну можно в FinalRelease(...)

S>Потоки работают с serial-портами и возможны ситуации когда они будут заблокированы на пару секунд. Как в таком случае ожидать их завершения?


WaitForSingleObject или WaitForMultipleObjects
Смотри в MSDN

The WaitForSingleObject function returns when one of the following occurs:
— The specified object is in the signaled state.
— The time-out interval elapses.

The WaitForMultipleObjects function returns when one of the following occurs:
— Either any one or all of the specified objects are in the signaled state.
— The time-out interval elapses.
Re[4]: Куда прикрутить Thread-ы ??
От: Serge Чехия  
Дата: 26.10.01 08:46
Оценка:
Здравствуйте Аноним, Вы писали:


А>WaitForSingleObject или WaitForMultipleObjects

А>Смотри в MSDN

А>The WaitForSingleObject function returns when one of the following occurs:

А>- The specified object is in the signaled state.
А>- The time-out interval elapses.

А>The WaitForMultipleObjects function returns when one of the following occurs:

А>- Either any one or all of the specified objects are in the signaled state.
А>- The time-out interval elapses.

Спасибо, но вопрос в том, не как, а ГДЕ в компоненте ожидать их завершения.
Re[5]: Куда прикрутить Thread-ы ??
От: SergeyAksuchenko Беларусь  
Дата: 26.10.01 08:52
Оценка:
Здравствуйте Serge, Вы писали:

S>Здравствуйте Аноним, Вы писали:



А>>WaitForSingleObject или WaitForMultipleObjects

А>>Смотри в MSDN

А>>The WaitForSingleObject function returns when one of the following occurs:

А>>- The specified object is in the signaled state.
А>>- The time-out interval elapses.

А>>The WaitForMultipleObjects function returns when one of the following occurs:

А>>- Either any one or all of the specified objects are in the signaled state.
А>>- The time-out interval elapses.

S>Спасибо, но вопрос в том, не как, а ГДЕ в компоненте ожидать их завершения.


Ну так в FinalRelease и перед тем как сделать delete this, поставь ожидание одной из выше перечисленных функций.
Re[6]: Куда прикрутить Thread-ы ??
От: Serge Чехия  
Дата: 26.10.01 09:20
Оценка:
Здравствуйте SergeyAksuchenko, Вы писали:

SA>Здравствуйте Serge, Вы писали:



SA>Ну так в FinalRelease и перед тем как сделать delete this, поставь ожидание одной из выше перечисленных функций.



А зачем в FinalRelease делать delete this ???
Re[7]: Куда прикрутить Thread-ы ??
От: SergeyAksuchenko Беларусь  
Дата: 26.10.01 09:33
Оценка:
Здравствуйте Serge, Вы писали:

S>Здравствуйте SergeyAksuchenko, Вы писали:


SA>>Здравствуйте Serge, Вы писали:



SA>>Ну так в FinalRelease и перед тем как сделать delete this, поставь ожидание одной из выше перечисленных функций.



S>А зачем в FinalRelease делать delete this ???


Самому этого делать не нужно.
Это реализованно в классах ATL(очень полезно в них покапаться для большего понимания).
А FinalRelease вызываются из Release(хотя возможны и другие реализации) когда ReferenceCounter достигает нуля, т.е. данный объект никто не использует и его следует уничтожить(освободить память).

Таким образом объект сам себя уничтожает, если на него нет больше ссылок.
Re[8]: Куда прикрутить Thread-ы ??
От: Serge Чехия  
Дата: 26.10.01 09:58
Оценка:
Все работает.

Спасибо всем.
Re[9]: Куда прикрутить Thread-ы ??
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.01 18:25
Оценка:
Здравствуйте Serge, Вы писали:

S>Спасибо всем.


Есть еще замечательные грабли. :) Сами месяц назад по ним прошлись. :(

Если быстро создать основной объект и сразу же его уничтожить, а именно это и делает подлый VB6 при компиляции проекта), то в ФайналРелиз придет еще не созданная нитка. Вернее нитка будет создана после и данные переданные туда будут грязью. Так что нужно принять меры к тому, чтобы ФайналРелиз не вызывался до полного завершения создания нитки. Это когда нитка считает переданный ей параметр.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Куда прикрутить Thread-ы ??
От: Lexey Россия  
Дата: 29.10.01 09:33
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Здравствуйте Serge, Вы писали:


S>>Спасибо всем.


VD>Есть еще замечательные грабли. :) Сами месяц назад по ним прошлись. :(


VD>Если быстро создать основной объект и сразу же его уничтожить, а именно это и делает подлый VB6 при компиляции проекта), то в ФайналРелиз придет еще не созданная нитка. Вернее нитка будет создана после и данные переданные туда будут грязью. Так что нужно принять меры к тому, чтобы ФайналРелиз не вызывался до полного завершения создания нитки. Это когда нитка считает переданный ей параметр.


Гы. Типичный Race однако.Таких граблей можно море себе насоздавать. :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.