Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.028 c
1-1097488106
prorok2
2004-10-11 13:48
2004.10.24
Статистические компоненты


3-1095519919
Irene
2004-09-18 19:05
2004.10.24
Проблема с кириллицей


14-1096691467
d.l
2004-10-02 08:31
2004.10.24
Нужен аналог Assist для Delphi


1-1097150494
denis24
2004-10-07 16:01
2004.10.24
Нажатие клавиши на форме после ее создания


1-1097392068
lid
2004-10-10 11:07
2004.10.24
MDI