Главная страница
    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.033 c
1-1097217646
СержК
2004-10-08 10:40
2004.10.24
Сетка на выделенной строке в RxDbGrid


1-1097129288
han-bratan
2004-10-07 10:08
2004.10.24
не могу проставить компоненты :(


14-1096769376
Думкин
2004-10-03 06:09
2004.10.24
Сднем рождения! 3 октября


1-1097388117
Артем К.
2004-10-10 10:01
2004.10.24
Как изменить какие-нить свойства компонентов на модальной форме


1-1097235049
Cosinus
2004-10-08 15:30
2004.10.24
StringGrid и пунктир if gdFocused (DrawFocusRect)?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский