Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

Работа с СОМ-портом   Найти похожие ветки 

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.035 c
3-1096027077
sten
2004-09-24 15:57
2004.10.24
экранирование символов


14-1096919355
Gero
2004-10-04 23:49
2004.10.24
Программа для локалки


11-1081756279
Delphi5.01
2004-04-12 11:51
2004.10.24
KOLSocket & File not found: objects.dcu


6-1092421868
Junior
2004-08-13 22:31
2004.10.24
TServerSocket в консольном приложении


14-1096489928
Cheater
2004-09-30 00:32
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский