![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 08.10.2010
Сообщений: 2
|
![]()
Добрый день.
Подскажите, пожалуйста, может, кто-нибудь делал такое: как к свойствам копонента 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: ![]() : 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. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Компонент 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 |