| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Ого! Воистину, лучше кома нет разъема |
| Автор: Nuzur 21.11.2005, 18:02 |
| Может ты просто не замечаеш как зависает 1-я программа, ведь если ты ее ставиш на "тупую" запись\чтение - именно етого и надо ожидать от программы. Советую запускать потоки, и "форма", тобиш диалог, не тормозит. |
| Автор: takedo 28.11.2005, 14:42 | ||
так разницы то нетууууу. Винда все равно между потоками проц делит, а процесс - всего навсего один как минимум поток. Так что все должно работать нормально, а если не работает, то тогда надо знать откуда данные то "сосуться" там проблема скорее всего... а может быть просто прогрмамма открывает уже открытий первыми экземплярами программы порт и нету в коде обработчика нормального этого события, вот она стоит и стоит(может ведь и так быть). Хотя согласен с threef надо код смотреть. |
| Автор: Dreamer_0x01 28.11.2005, 18:59 | ||
Разница есть. Если ты в одном и том же потоке и вычисления делаешь какие-то,и контролы на форме обновляешь - то это обновление будет весьма сильно подтормаживать. Если все жуткие вычисления вывести в отдельный поток, а интерфейсному потоку слать сообщения - все работает гораздо приятнее. Проверено на опыте. |
| Автор: takedo 29.11.2005, 09:42 |
| Dreamer_0x01 Это ведь все равно никак не объясняет почему работает первые две программы, а последеющие - нет. Они абсолютно равнозначны для виндовс (FIFO однако...). А про что ты сказал, это правда конечно, но в данном то случае какая - то другая проблема... thesnidestone - ну че код то где??? долго нам гадать придется, что там у тебя... PS.: самому ведь уже интересно стало |