Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка прерываний, в Visual C++ 
:(
    Опции темы
Aline
Дата 21.2.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 470
Регистрация: 22.7.2005
Где: Таруса

Репутация: нет
Всего: нет



Привет всем!
Делаю проект, в котором необходимо в отдельном потоке отловить событие(прерывание) и послать сообщение.
В отдельности с каждой проблемой вроде бы разобралась: как создать поток, как ожидать событие, как послать сообщение. А вот всё вместе работать не хочет...

Вот частичный код:

Код

hEvent = OpenEvent(SYNCHRONIZE, false, (LPCWSTR)"IRK_Event");

RecThread = gcnew Thread(gcnew ThreadStart(&ThreadProc));


далее...
Код

static void ThreadProc()
           {            
        
               if (WaitForSingleObject(hEvent, 500) != WAIT_TIMEOUT) {
                   PostMessage(Form1::hForm,WM_USER,0,0);               
               }         
           }


по событию, обрабатываем:

Код

 [SecurityPermission(SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)]
          virtual void WndProc( Message% m ) override
          {
             
             // Listen for operating system messages.
             switch ( m.Msg )
             {
                case WM_USER:          
                   StartRecRead();                   
                   break;           
             }
             Form::WndProc( m );
          }



но проблема в том, что когда прерывания идут подряд, буквально разница в считанные миллисекунды, они теряются...

Что здесь можно сделать?
PM MAIL   Вверх
marcusmae
Дата 22.2.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Aline,  первый фрагмент кода, видимо, находится в рутине StartRecRead()? То есть, приходит первое сообщение WM_USER - вы по нему создаёте поток, который ждёт, когда возникнет другое событие "IRK_Event", и как только оно возникает, отправляет очередное событие WM_USER, которое создаёт новый поток и т.д. Так? Ну, подозрительного вроде ничего нет, было бы по-больше коду - можно было бы потестить...


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Aline
Дата 26.2.2008, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 470
Регистрация: 22.7.2005
Где: Таруса

Репутация: нет
Всего: нет



marcusmae, нет, первый фрагмент - на кнопке. Т.е. жмешь на кнопку, запускаешь поток, как только произошло событие в StartRecRead происходит считывание данных с платы. Проблема в том, что началось считывание, а в это время могло произойти ещё одно событие и почему то оно пропадает....
Была мысль, что нужно создать очередь сообщений, но как то у нас не получилось сочередью...
PM MAIL   Вверх
marcusmae
Дата 26.2.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата(Aline @  26.2.2008,  08:36 Найти цитируемый пост)
Проблема в том, что началось считывание, а в это время могло произойти ещё одно событие и почему то оно пропадает....


Ну тогда по-моему совершенно понятно, почему оно пропадает : кнопка включает слушателя WaitForSingleObject в отдельном потоке. Как только событие произошло, ожидание событий закончилось - всё, что пришло после, никому не нужно. Правильно?

В принципе, роль потока, как я понимаю, незначительна. Раз Вы коду полноценного не даёте, то можно временно переткнуть цикл ожидания в основной поток и походить там отладчиком, чтобы понять что происходит.

Это сообщение отредактировал(а) marcusmae - 26.2.2008, 10:02


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.