Неожиданное поведение программы при работе в Windows 2000, некорректная отработка.... |
Здравствуйте, гость ( Вход | Регистрация )
Неожиданное поведение программы при работе в Windows 2000, некорректная отработка.... |
AD |
18.6.2009, 12:45
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Вот вкладка работы в автоматическом режиме
[attachment=675:picture1.JPG] Задается количество вращений по каждой из плоскостей и запускается выполнение (выполнение происходит в отдельных потоках). Отдельно вращение в вертикальной проекции - доп. поток VerticalRotation, отдельное - в горизонтальной - доп. поток HorizontalRotation. В Windows XP все отрабатывает корректно. Параллельно вращается прожектор в обеих плоскостях, есть отсчет счетчиков - все нормально. В Windows 2000 вращение дает делать только поочередно, отсчет счетчиков происходит только по окончании выполнения цикла. Как можно поправить этот глюк? Сообщение отредактировал AD - 18.6.2009, 13:14 |
|
|
AD |
18.6.2009, 13:31
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Система такая:
Вкладка унаследована от QWidget. НА ней размещены элементы, как показано на рисунке. После открытия порта, становятся доступны кнопки "Start Vertical", "Start Horizontal" При нажатии на каждую из кнопок запускается соответствующий поток выполнения вращения. Вот некоторое описание использующихся классов: VerticalProjection
HorizontalProjection
Вот класс, где есть слоты выполнения нажатия на кнопки и сами потоки: Раскрывающийся текст
Функции запуска потоков:
|
|
|
AD |
19.6.2009, 8:59
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Что-то не получается. Под XP работает нормально, а под Windows 2000 некорректно. Вот код, где идет синхронизация информации, принимаемой от потоков:
Сообщение отредактировал AD - 19.6.2009, 9:01 |
|
|
AD |
23.6.2009, 12:29
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Проблему удалось решить. Если посмотреть на код, то можно увидеть, что чтение данных от прожектора идет в каждом потоке отдельно. Было сделано предположение, что в Windows 2000 прочитанные данные распределяются между потоками не пакетами, а какими-то половинчатыми кусками принятых данных.
Для решения был создан еще один поток, куда были вынесены чтение из порта и запись в порт. Если будет интересно, то покажу получившийся код. В каком-то смысле он стал немного запутаннее, а в каком-то лучше! |
|
|
AD |
23.6.2009, 13:51
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Думал, кому-нибудь такие вещи будут интересны.....
|
|
|
SABROG |
23.6.2009, 14:09
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Думал, кому-нибудь такие вещи будут интересны..... Не интересно, потому, что в коде присутствуют какие-то структуры неизвестного назначения, к тому же нигде не написан сокральный смысл создания массы потоков, которые будут читать все с одного устройство. Да и вообще работа Qt со своими девайсами мало интересует. Это, как правильно, не кроссплатформенно и узконаправлено, типа сигналы с датчиков читать или работать с программатором через COM-порт. Какие-то промышленные задачи. |
|
|
Текстовая версия | Сейчас: 19.12.2024, 10:20 |