Текущий архив: 2004.10.24;
Скачать: CL | DM;
ВнизРабота с СОМ-портом Найти похожие ветки
← →
SergP. (2004-09-19 09:40) [0]Открываю порт как файл, а далее работаю с ним используя
WriteFile и ReadFile. Оно работает, но есть такая проблема: допустим девайс подключенный к COM порту посылает компу некоторые данные, прога должна принять их и обработать. Как это можно сделать? Делать отдельный Thread и там постоянно проверять не поступили ли данные с девайса, или есть методы попроще?
И вообще можно ли как-нить использовать для этих целей IRQ на которых "висят" соответствующие COM порты?
ЗЫ Если что не так написал - ногами не бейте, а помогите.
← →
GanibalLector © (2004-09-19 11:53) [1]с Thread самое разумное решение.Есть конечно и проще(без использования Thread)но,это хуже.
Если Вы прочли хоть одну статью,то наверно видели,что существует такое понятие как маска.Более того,случаев для установок этих масок более чем предостаточно.
И вообще можно ли как-нить использовать для этих целей IRQ на которых "висят" соответствующие COM порты?
Имхо,НЕТ.
← →
SergP. (2004-09-19 15:05) [2]
> Если Вы прочли хоть одну статью,то наверно видели,что существует
> такое понятие как маска.Более того,случаев для установок
> этих масок более чем предостаточно.
Если Вас не затруднит, на всякий случай киньте пару линков на такие статьи...
← →
SergP. (2004-09-19 16:56) [3]Сделал используя Thread. Работает, вроде бы и кода для этого понадобилось совсем немного, но все равно мне это что-то не нравится, т.е. сам принцип постоянного опроса в дополнительном потоке не нравится. Неужели Винда не предусматривает возможности чтобы приложения могли использовать аппаратные прерыввания? Видимо Билли что-то здесь недоработал....
← →
DiamondShark © (2004-09-19 21:27) [4]
> Неужели Винда не предусматривает возможности чтобы приложения
> могли использовать аппаратные прерыввания? Видимо Билли
> что-то здесь недоработал....
У тебя поток, ждущий ввода с порта, стоит, пока не появятся данные. Какая разница, кто запустит поток -- аппаратное прерывание или диспетчер потоков?
← →
SergP. (2004-09-20 01:43) [5]
> [4] DiamondShark © (19.09.04 21:27)
Поток постоянно опрашивает пока не появятся данные, а при обработке аппаратного прерывания процедура(функция) сработает только когда эти данные появятся. ИМХО разница все-таки есть: тупой цикл ожидания и процедура срабатывающая только в нужный момент...
← →
Evgeny V © (2004-09-20 07:34) [6]Смотри SetCommMask и WaitCommEvent
← →
MBo © (2004-09-20 08:45) [7]>Поток постоянно опрашивает пока не появятся данные
Нет, не так. При использовании Wait-функций ([6]) поток будет "спать", не крутясь понапрасну.
← →
SergP. (2004-09-20 09:00) [8]
> [7] MBo © (20.09.04 08:45)
> >Поток постоянно опрашивает пока не появятся данные
> Нет, не так. При использовании Wait-функций ([6]) поток
> будет "спать", не крутясь понапрасну.
Спасибо. Вы меня успокоили...
← →
Erik1 © (2004-09-20 10:44) [9]Вобщето есть возможность работы в асинхроном режиме (overlapped) Пример:
function TCustomComm.WaitRead(var Buf: String): Integer;
var
Overlapped: TOverlapped;
begin
FillChar(Overlapped, Sizeof(Overlapped), 0);
Overlapped.hEvent := FEvent.Handle;
SetLength(Buf, ReadBufSize);
ReadFile(FHandle, PChar(Buf)^, ReadBufSize, DWord(Result), @Overlapped); // аиснхроное чтение
GetOverlappedResult(FHandle, Overlapped, DWord(Result), True); //ральное чтение с ожиданием, в случии False без ожидания
FEvent.ResetEvent; //это для треда
SetLength(Buf, Result);
end;
Страницы: 1 вся ветка
Текущий архив: 2004.10.24;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.033 c