Создание многопоточных приложений. Что выбрать?
От: rx4hx  
Дата: 20.03.06 08:49
Оценка: :)
Появилась необходимость сделать в приложении процесс, максимально при выполнении не зависящий и не тормозящийся от основного процесса, при этом он сам не должен тормозить основной процесс. Попытка выделить его в отделиный Thread к успеху не привела — все равно допустим при минимизации основного окна выполнение процесса тормозилось.
Тогда была сделана попытка просто выделить этот процесс в отдельный EXE-фаил . Тут вышла другая проблема — обмен данными с приложением.
Прочитав про технологию COM я понял что это как раз решение моей проблемы.
Подскажите, правильно ли я понял — что мне надо просто создать ActivX DLL — которая как раз в своей работе создаст независимый поток в моем приложении, который как мне и надо, не юудет тормозить основной поток? Или же мне надо создать ActivX EXE- фаил? Необходимости запускать отдельно данный процесс нет, так что вроде как ActivX DLL подходит больше.
Re: Создание многопоточных приложений. Что выбрать?
От: Сергей  
Дата: 21.03.06 13:10
Оценка:
Здравствуйте, rx4hx, Вы писали:

>[..]

Вот мои мысли по этому вопросу:

1. Если что-то будет работать параллельно с основным приложением, оно по-любому будет загружать систему => основному приложению достанется меньше процессорного времени — а это и есть торможение
2. Вариантов всего два — это либо потоки в одном процессе, либо потоки в разных процессах. И ActiveX/COM этого положения вещей никак не изменяет, поэтому ИМХО это лишнее.
3. Процесс по определению тяжелее потока, ибо требует больше системных ресурсов.
4. Попробуйте поиграться с приоритетами потоков, может быть это то, что вам надо.
Re: Создание многопоточных приложений. Что выбрать?
От: Fedor Novikov Россия  
Дата: 21.03.06 17:07
Оценка:
Здравствуйте, rx4hx, Вы писали:

R>Тогда была сделана попытка просто выделить этот процесс в отдельный EXE-фаил . Тут вышла другая проблема — обмен данными с приложением.


Если делать полностью асинхронный обмен данными, то, может, лучше будет разделяемая память? Накладных расходов при этом минимум (практически все реализуется аппаратно) в отличе от COM с его маршаллингом.
А ActiveX DLL отдельный поток сама по себе создавать не будет, это надо еще там написать. В результате опять получится многопоточное приложение...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Федор Новиков
Re: Создание многопоточных приложений. Что выбрать?
От: Serge Чехия  
Дата: 23.03.06 13:22
Оценка:
Здравствуйте, rx4hx, Вы писали:

R>Тогда была сделана попытка просто выделить этот процесс в отдельный EXE-фаил . Тут вышла другая проблема — обмен данными с приложением.


Можно еще пайпы использовать
Re: Создание многопоточных приложений. Что выбрать?
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 27.03.06 08:36
Оценка: +1
Здравствуйте, rx4hx, Вы писали:

R>Тогда была сделана попытка просто выделить этот процесс в отдельный EXE-фаил . Тут вышла другая проблема — обмен данными с приложением.


в чем эта проблема заключается?
"Что не завершено, не сделано вовсе" Гаусс
Re: Создание многопоточных приложений. Что выбрать?
От: Roman Pushkin Россия  
Дата: 27.03.06 09:29
Оценка:
Здравствуйте, rx4hx, Вы писали:

R>Появилась необходимость сделать в приложении процесс, максимально при выполнении не зависящий и не тормозящийся от основного процесса, при этом он сам не должен тормозить основной процесс.


Сначала думал предложить концепцию доменов в .NET, но не знаю как сделать, чтобы не тормозить основной процесс. В общем RTFM, может быть там что-нибудь есть на эту тему.

R>Тогда была сделана попытка просто выделить этот процесс в отдельный EXE-фаил . Тут вышла другая проблема — обмен данными с приложением.


Обмен данными — проще простого. Remoting.

Все это, конечно, если ты используешь .NET.
.
Re: Создание многопоточных приложений. Что выбрать?
От: cencio Украина http://ua-coder.blogspot.com
Дата: 28.03.06 13:53
Оценка:
Здравствуйте, rx4hx, Вы писали:

R>Появилась необходимость сделать в приложении процесс, максимально при выполнении не зависящий и не тормозящийся от основного процесса, при этом он сам не должен тормозить основной процесс. Попытка выделить его в отделиный Thread к успеху не привела — все равно допустим при минимизации основного окна выполнение процесса тормозилось.

в чем проявляеться "торможение"?
явно что-то напутал, минимизация главного окна не должна влиять на "вычислительный" поток, Создай обычный Worker Thread, если используеш мфс, и посмотри тормозиться он или нет

R>Тогда была сделана попытка просто выделить этот процесс в отдельный EXE-фаил . Тут вышла другая проблема — обмен данными с приложением.

R>Прочитав про технологию COM я понял что это как раз решение моей проблемы.
R>Подскажите, правильно ли я понял — что мне надо просто создать ActivX DLL — которая как раз в своей работе создаст независимый поток в моем приложении,
ты уже пробовал создават отдельный поток, не вышло, а чем поток созданый в активХ будет лучше?

R>который как мне и надо, не юудет тормозить основной поток?

еще прочитай про потоковые модели в комах и про апартменты, обьясняь это в форуме слишком долго.
Re: Создание многопоточных приложений. Что выбрать?
От: Roman Pushkin Россия  
Дата: 28.03.06 19:22
Оценка:
Здравствуйте, rx4hx, Вы писали:

R>Прочитав про технологию COM я понял что это как раз решение моей проблемы.

Ты ошибаешься.
.
Re[2]: Создание многопоточных приложений. Что выбрать?
От: demi США  
Дата: 31.03.06 08:33
Оценка:
Здравствуйте, Fedor Novikov, Вы писали:

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


R>>Тогда была сделана попытка просто выделить этот процесс в отдельный EXE-фаил . Тут вышла другая проблема — обмен данными с приложением.


FN>Если делать полностью асинхронный обмен данными, то, может, лучше будет разделяемая память? Накладных расходов при этом минимум (практически все реализуется аппаратно) в отличе от COM с его маршаллингом.

FN>А ActiveX DLL отдельный поток сама по себе создавать не будет, это надо еще там написать. В результате опять получится многопоточное приложение...

Это через так называемый шареный сегмент dll-ки? Я делал, но с синхронизацией проблемы все равно.
Не стыдно попасть в дерьмо, стыдно в нём остаться!
Re[2]: Создание многопоточных приложений. Что выбрать?
От: VVB16 Россия  
Дата: 05.04.06 13:51
Оценка:
Здравствуйте, cencio, Вы писали:

C>в чем проявляеться "торможение"?

C>явно что-то напутал, минимизация главного окна не должна влиять на "вычислительный" поток, Создай обычный Worker Thread, если используеш мфс, и посмотри тормозиться он или нет

Ничего он не напутал.
Минимизация окна приложения с NORMAL_PRIORITY_CLASS понизит ему приоритет выполнения (соотвественно и всем его потокам), так уж в Windows устроен шедулер.
Хотя по самой постановке задачи фиг поймешь, что человеку надо, только догадки остаются.
Догадки у меня такия — взаимодействие только асинхронное (не блокирутеся ни тот ни другой), т.е. роем в сторону обмена сообщениями, очередей сообщений, active objects...
Если на C++ — то доктор прописал ACE, чтобы велосипедов не изобретать.
Re[3]: Создание многопоточных приложений. Что выбрать?
От: DJ KARIES Россия  
Дата: 08.04.06 16:27
Оценка:
Здравствуйте, demi, Вы писали:

D>Это через так называемый шареный сегмент dll-ки? Я делал, но с синхронизацией проблемы все равно.

Можно FileMapping или именовынные каналы (Named Pipes).
Синхронизация посредством их же или семафоров (Mutex).
http://dkdens.narod.ru http://giref.forthworks.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.