Главная страница
    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.46 MB
Время: 0.033 c
1-1097152691
sergg
2004-10-07 16:38
2004.10.24
Свойства КомбоБокс


14-1096730173
QuestionX
2004-10-02 19:16
2004.10.24
Множество try except finally ?


1-1097336030
UserUserov
2004-10-09 19:33
2004.10.24
Как изменить имя директория?


1-1097467293
TeNY
2004-10-11 08:01
2004.10.24
Как рисовать на экране?


3-1096350232
Нович[Ок]
2004-09-28 09:43
2004.10.24
Использование БД при написании системы "СКЛАД"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский