Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подвисание кнопок 
:(
    Опции темы
bra1ss
Дата 3.10.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Суть такая: в диалоге есть несколько кнопок, по нажатию которых данные отправляются на COM-порт. Также данные принимаются с COM-порта по таймеру (запускается в OnInitDialog). Для обмена с COM-портом использую библиотеку SerialGate.dll. Так вот, первый цикл таймера выполняется только через несколько секунд после запуска, хотя должен через 500 мс по SetTimer. Аналогично себя ведут функции-обработчики кнопок; первые несколько секунд на нажатие кнопок нет реакции. OnInitDialog нигде не стопорится.

С MFC знаком не так давно, самому решить проблемы пока не получается...

Код

BOOL CCameraControlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
 
... 
 
iris = 0;
 
// открыть диафрагму на 24
char buffIR[5];
buffIR[0] = 0x02;
buffIR[1] = 0x3A;
buffIR[2] = 0x00;
buffIR[3] = 0x18;
buffIR[4] = 0x03;
sg.Send(buffIrisDown, sizeof(buffIrisDown));
 
iris = 256*(int)(unsigned char)buffIR[i+2] + (int)(unsigned char)buffIR[i+3];
CString str
str.Format(_T("%d"), iris);
SetDlgItemText(IDC_IRIS_VALUE, str);
 
// запуск таймера для приема команд
SetTimer(1, 500, NULL);
 
// запрос текущего состояния
char buffZF[5];
buffZF[0] = 0x02;
buffZF[1] = 0x50;
buffZF[2] = 0x00;
buffZF[3] = 0x00;
buffZF[4] = 0x03;
sg.Send(buffZF, sizeof(buffZF));
 
TRACE("OnInit Ends\n");
}
 
void CCameraControlDlg::OnTimer(UINT_PTR nIDEvent)
{
 
    TRACE("Timer starts\n");
 
    char buff[255];
    int rcv = sg.Recv(buff, sizeof(buff));
    if (rcv > 0)
    {
        for (int i = 0; i < rcv; i++)
        {
            // запрос зума
            if ((buff[i]==0x02) & (buff[i+4]==0x03))
            {
                if (buff[i+1] == 0x40)
                {
                    currentzoom = 256*(int)(unsigned char)buff[i+2] + (int)(unsigned char)buff[i+3];
                    TRACE("Current Zoom 1 - %d\n", currentzoom);
                    zoom = currentzoom;
 
                    CString str;
                    str.Format(_T("%d"), currentzoom);
                    SetDlgItemText(IDC_ZOOM_VALUE, str);
                }
 
                                ...
 
                        }
                }
       }
}
 
// обработчик одной из кнопок
void CCameraControlDlg::OnBnClickedIrisUp()
{
    TRACE("Button IrisUp Clicked\n");
 
    char buffIrisUp[5];
    if (iris < 32){iris++;} 
    buffIrisUp[0] = 0x02;
    buffIrisUp[1] = 0x3A;
    buffIrisUp[2] = (char)(iris / 256);
    buffIrisUp[3] = (char)(iris % 256);
    buffIrisUp[4] = 0x03;
    sg.Send(buffIrisUp, sizeof(buffIrisUp));
 
    CString str;
    str.Format(_T("%d"), iris);
    SetDlgItemText(IDC_IRIS_VALUE, str);
    TRACE("Iris - %d\n", iris);
}


Это сообщение отредактировал(а) bra1ss - 6.10.2010, 13:03
PM MAIL   Вверх
Albor
Дата 6.10.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А не пробовал отключать строки передачи данных (Send)? Я не знаю что это за функция, но, возможно, она не возвращает управление пока не решит свою задачу.
PM MAIL ICQ   Вверх
13dreams
Дата 6.10.2010, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А что принимает com порт?

у меня с этой длл проблем таких не было, а вот с классом SerialGate был похожий трабл - приложение висло пока данные не были приняты

попробуй приём данных в отдельном потоке реализовать чтоли, или разбирайся с самим портом - мне кажется там надо какой-то вывод просто напросто сконфигурировать. (я сам с этим до конца так и не разобрался, хотелось бы самому ответ услышать)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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