Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > "Зависание" программы


Автор: thesnidestone 9.11.2005, 14:52
Доброго времени суток.

Есть программа, которая работает с com-портом: непрерывно считывает из него данные. Необходимо запустить несколько экземпляров программы на одном компьютере (4 и более). Проблема заключается в том, что если запускать более 2х экземпляров, например, 3, то первые два зависают (прогресс бар молчит, форма не реагирует на нажатия кнопок), при этом в диспетчере задач пишется, что "программа не отвечает", а 3ий экземпляр работает нормально. Тем не менее две "зависшие" программы продолжают считывание из порта и запись в файл.

Подскажите, пожалуйста, что делать?

Спасибо.

Автор: Dreamer_0x01 9.11.2005, 15:05
не очень понял.
разве можно открыть ком-порт в нескольких приложениях?

Или ты его каждый раз закрываешь?

Автор: thesnidestone 9.11.2005, 15:08
Не ... Все проще. На машине установлено 16 портов. Один экземпляр программы - один порт.

Автор: threef 19.11.2005, 15:20
Для такой цели лучше использовать не отдельные экземпляры задачи, а отдельные потоки. Один поток - один порт. Посмотри MutiThreading( AfxBeginThread и т.п.) . Еще тебе придется разбираться с критическими секциями и семафорами. А вообще-то без кода разобраться, чего у тебя там, сложновато...

Автор: WERITAS 21.11.2005, 17:56
Цитата
На машине установлено 16 портов.


Ого! Воистину, лучше кома нет разъема smile

Автор: Nuzur 21.11.2005, 18:02
Может ты просто не замечаеш как зависает 1-я программа, ведь если ты ее ставиш на "тупую" запись\чтение - именно етого и надо ожидать от программы.
Советую запускать потоки, и "форма", тобиш диалог, не тормозит.

Автор: takedo 28.11.2005, 14:42
Цитата
Советую запускать потоки, и "форма", тобиш диалог, не тормозит.

так разницы то нетууууу. Винда все равно между потоками проц делит, а процесс - всего навсего один как минимум поток. Так что все должно работать нормально, а если не работает, то тогда надо знать откуда данные то "сосуться" там проблема скорее всего...
а может быть просто прогрмамма открывает уже открытий первыми экземплярами программы порт и нету в коде обработчика нормального этого события, вот она стоит и стоит(может ведь и так быть).
Хотя согласен с threef надо код смотреть.

Автор: Dreamer_0x01 28.11.2005, 18:59
Цитата(takedo @ 28.11.2005, 14:42)
так разницы то нетууууу. Винда все равно между потоками проц делит, а процесс - всего навсего один как минимум поток.

Разница есть. Если ты в одном и том же потоке и вычисления делаешь какие-то,и контролы на форме обновляешь - то это обновление будет весьма сильно подтормаживать. Если все жуткие вычисления вывести в отдельный поток, а интерфейсному потоку слать сообщения - все работает гораздо приятнее. Проверено на опыте.

Автор: takedo 29.11.2005, 09:42
Dreamer_0x01
Это ведь все равно никак не объясняет почему работает первые две программы, а последеющие - нет. Они абсолютно равнозначны для виндовс (FIFO однако...). А про что ты сказал, это правда конечно, но в данном то случае какая - то другая проблема...

thesnidestone - ну че код то где??? долго нам гадать придется, что там у тебя...
PS.: самому ведь уже интересно стало smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)