|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.05.2008, 21:57 | #1 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Потоки, приоритеты и подобное
Пишу программу. Она собирает данные с устройтсва и обрабатывает их. Ньюанс в том, что данные идут потоком и их надо считывать постоянно, если где-то "тормознуть", то данные пропадут. В связи с этим съем данных было выделенно в отдельный поток, который пишет данные в пямять, а основная программа их потом обрабатывает.
Пробелмма в том, что это нифига не помогло, т.е. Все равно при больших вычислениях данные теряются. Почему отдельный поток торомзит? Приоритет выставлен максимальный. Выглядит код примерно так: Код:
|
17.05.2008, 22:10 | #2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
А что это за такое странное устройство, к которому у Вас есть, видимо, прямой доступ под Windows, но, судя по всему, нет драйвера??? Windows не гарантирует точную синхронизацию и тем более непрерывную работу потока. Скорее наоборот - гарантирует, что Ваш поток будет постоянно прерываться - это основа работы любой многозадачной ОС на ограниченом числе процессоров.
|
17.05.2008, 22:26 | #3 | ||
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Цитата:
Цитата:
|
||
17.05.2008, 22:41 | #4 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Sergey2, если есть драйвер, значит он должен справляться с этой проблемой самомтоятельно с помощью своего буфера. К тому же все устройства уже очень-очень давно работают через прерывания и такая ископаемая схема с непрерывным опросом порта практически не использовалась уже в восьмидесятые. Отсюда и мой вопрос - странно это как-то. Может быть стоит разобраться с драйвером? Или с устройством? Как это так, оно шлёт данные, которые у него не просит драйвер, судя по тому, что у него не выбран буфер. Что касается приоритетов - это абсолютно ничего не даст (если я всё-таки правильно понял проблему). Запустите System Monitor и посмотрите, сколько происходит переключений контекста в секунду и сколько в системе работает потоков, даже не учитывая, что есть сугубо "ядерные" потоки. Сразу сможете примерно прикинуть сколько времени и с какими промежутками работает Ваш поток. Насчёт Application.ProcessMessage не совсем понял. Это вообще никакого отношения к потокам не имеет, по крайней мере применительно к этой проблеме.
|
18.05.2008, 01:46 | #5 | ||
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Цитата:
Цитата:
|
||
19.05.2008, 08:42 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
По-моему было бы не лишним мануал по устройству и драйверу почитать...
I'm learning to live...
|
19.05.2008, 09:00 | #7 | ||
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Цитата:
|
||
19.05.2008, 11:08 | #8 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Цитата:
Поток, вызвавший функцию, ждёт возврата из неё, и то с несколькими уточнениями. Системе же, другим процессам и даже другим потокам Вашего процесса сей вызов абсолютно безразличен. Application.ProcessMessage это просто стандартная комбинация из GetMessage - TranslateMessage - DispatchMessage. |
|
19.05.2008, 20:25 | #9 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Устройтсво не может "ждать". Оно льет и льет. Дело не в драйверах. По другому никак. И другого устройства не будет.
|
19.05.2008, 22:13 | #10 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Не знаю, чем именно Вам помочь. Что за "устройство" Вы не говорите, как читаете не показываете, а угадывать не хочется. Ни один нормальный девайс не проектируют так, чтобы он устраивал флуд-атаки на свой же компьютер и чтобы данные с него нельзя было читать на сколь угодно медленной и сколь угодно загруженой машине. Если Это устройство Вашей собственной разработки, значит сделано оно неправильно, если от восточного соседа, значит в мусорку его, а "другого устройства не будет" - это странный аргумент...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DLL, потоки | BOBAH13 | Общие вопросы Delphi | 23 | 27.02.2008 20:43 |
Нечто подобное таймеру | Артэс | Общие вопросы C/C++ | 8 | 11.02.2008 19:19 |
работа с принтером (ну или что-то подобное) | Рустам | Win Api | 2 | 03.02.2008 16:24 |
Потоки в С | Raptor | Помощь студентам | 1 | 07.01.2008 21:12 |