Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2011, 15:34   #1
tans
Новичок
Джуниор
 
Регистрация: 08.10.2010
Сообщений: 2
По умолчанию Компонент JVHIDDeviceController, работа в потоке

Добрый день.
Подскажите, пожалуйста, может, кто-нибудь делал такое: как к свойствам копонента JVHIDDeviceController (для работы с HID) обратиться из потока? Синронизация потоков не помогает. Еще у меня обработка происходит в разных файлах проекта.

В главном файле проекта я описываю:

main.h:
__published:
TJvHidDeviceController *HidDevCtl;
void __fastcall HidDevCtlArrival(TJvHidDevice *HidDev);
bool __fastcall HidDevCtlEnumerate(TJvHidDevice *HidDev, const int Idx);
void __fastcall HidDevCtlDeviceChange(TObject *Sender);
void __fastcall HidDevCtlDeviceData(TJvHidDevice *WorkDev, BYTE ReportID, const *Data, WORD Size);

public:
__fastcall TForm1(TComponent* Owner);
TJvHidDevice *WorkDev;

class proverka_rejima : public TThread
{
private:
void __fastcall Obrabotka();
protected:
void __fastcall Execute();

public:
__fastcall proverka_rejima(bool CreateSuspended);




в файле обработки:

obrabotka.cpp:
proverka_rejima *potok=new proverka_rejima(true);
extern TJvHidDevice *WorkDev;
...

void __fastcall TForm1::Button2Click(TObject *Sender) //кнопка старт
{
WorkDev->WriteFile(buf,WorkDev->Caps.OutputReportByteLength,Writte n) ;
potok->FreeOnTerminate = true;
potok->Resume();
}

__fastcall proverka_rejima:roverka_rejima(bo ol CreateSuspended)
: TThread(CreateSuspended)
{
}

void __fastcall proverka_rejima::Execute()
{
while(!Terminated)
{
Synchronize(Obrabotka);
}
}

void __fastcall proverka_rejima:: Obrabotka()
{
if (pause_mode_step_counter!=0) {
pause_mode();
}
if (zaderjka_mode_step_counter!=0) {
zaderjka_mode();
}
if (sliv_mode_step_counter!=0) {
sliv_mode();
}
}


в файле pause_mode.cpp:

extern TJvHidDevice *WorkDev;
void pause_mode(void)
{
flag_dannye__for_sending_ready=fals e;
switch (pause_mode_step_counter)
{
case 1:
if (flag_delitel==1)
{
buf[0] = 0x00;
buf[1] = 'd';
buf[2] = 0x31;
WorkDev->WriteFile(buf,WorkDev->Caps.OutputReportByteLength,Writte n) ;
Timer1->Enabled=true;
}
else
{
buf[0] = 0x00;
buf[1] = 'd';
buf[2] = 0x32;
WorkDev->WriteFile(buf,WorkDev->Caps.OutputReportByteLength,Writte n) ;
}
...

}
И у меня получается, что при запуске потока workdev=NULL, при попытке отправить данные - ошибка.
Также в этом потоке не получается запустить таймер, и не видятся некоторые переменные. Что я делаю не так?

Последний раз редактировалось tans; 13.12.2011 в 15:45.
tans вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент OPCClient в потоке Gregor Компоненты Delphi 10 16.03.2011 11:53
Компонент WebBrowser, работа с Flash-видео Angel of Live Компоненты Delphi 2 14.11.2010 00:09
Некорректная работа функции в потоке. TwiX Общие вопросы Delphi 3 28.02.2010 12:33
работа с TStringList в потоке OPF_Nik Помощь студентам 6 01.02.2010 15:15
работа с БД без vcl компонент Jager-ntr БД в Delphi 1 17.05.2008 21:20