В общем, уважаемые, такая проблема: я пишу прогу, которая контролирует некий прибор через COM-порт. Прибор принимает команды, делает то, что от него требуется и в случае команды "передать данные" возвращает результат.
Все это хорошо и красиво, только вот заметил я странную вещь: во время работы прибора комп жутко тормозит, даже мышь по экрану еле ползает, но это еще не все: по каким-то неизвестным мне причинам, начинают отставать системные часы (вообще-то, я считал что это невозможно, ведь за них отвечает отдельная микросхема со своим питанием, а контроллер системного таймера я ес-но не трогал). Теперь о программе: т.к. прибор воспринимает только команды низкого уровния (типа: повернуть двигатель N на M градусов, зажечь лампу P раз, снять показания флуориметра, повернуть еще на M градусов и т.д.), в связи ч чем, все это у меня выведено в цикле:
Repeat
Повернуть;
Зажечь;
Считать;
Until CurPos>=MoveTo;
Перед каждой очередной командой, я должен быть уверен, что прибор в данный момент завершил предыдущую; для этого есть команда: "текущее действие", я вызываю ее после каждого действия и проверяю на ноль (если ноль - то "свободен"). Далее - задержка в 100 мс (это нужно для контроллера прибора) и след. команда. Так вот, задержки я делаю через Sleep(100), сразу после Sleep ставлю Application.ProcessMessages; не фига - тормоза жуткие...
Я уже вывел операции с COM-портом в отдельный поток, та же самая ситуация! В общем, я в ауте... Че делать дальше - не знаю (в таком виде прогу сдавать стыдно, она на 1700 Селероне тормозит, да еще и время замедляет...). Да, насчет таймера, на всякий случай: указатели я в проге практически не использую, дин. массивы - тоже, т.е. вероятность того, что я влезаю в системную память и там что-либо меняю - мин.
В общем, если у кого есть идеи и предложения, я с радостью бы выслушал...
Проблема с Rs-232 связью, тормозит COM-порт |