![]() |
|
|
![]()
|
|
| Valeri |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.2.2007 Репутация: нет Всего: нет |
Новая проблема:
в программе существует поток, задачей которого является чтение из СОМ-порта. Время от времени (раз в сутки) требуется передавать в порт один байт. Для этого перед передачей байта хочу остановить (подвесить) поток чтения из порта. Но при попытке передавать байт в порт прога виснет Поток чтения: void __fastcall TComThread::Execute() { DWORD dwCommEvent; DWORD dwError; DWORD dwRead; TComStat COMSTAT; unsigned long int NumByteRead; LPDWORD lpNumberOfBytesWritten=&NumByteRead; LPVOID lpBuffer1=&(Form1->Data); while(!Terminated) { if(WaitCommEvent(Form1->hCom,&dwCommEvent,NULL)) if(ClearCommError(Form1->hCom,&dwError,&COMSTAT)) dwRead=COMSTAT.cbInQue; { while (dwRead) { ReadFile(Form1-hCom lpBuffer1,dwRead,lpNumberOfBytesWritten, NULL); Form1->Nsect=Form1->Data.RecByte1 Form1->Fh=(Form1->Data.RecByte2)+((Form1->Data.RecByte3)*255); Form1->Label20->Caption=IntToStr(Form1->Data.RecByte1); Form1->Label21->Caption=IntToStr(Form1->Data.RecByte2); Form1->Label23->Caption=IntToStr(Form1->Data.RecByte3); Form1->Label24->Caption=IntToStr(Form1->Fh); } } } } //---------------------------------------------------------------- ниже модуль где я пытаюсь притормозить поток и передавать в порт при нажатии кнопки: void __fastcall TForm13::Button2Click(TObject *Sender) { if (Edit1->Text=="") { AnsiString Msg="Введите данные"; Application->MessageBox(Msg.c_str(), "Ошибка", MB_OK); } else {if (StrToFloat(Edit1->Text)<55) { AnsiString Msg="Низкая скорость"; Application->MessageBox(Msg.c_str(), "Ошибка", MB_OK); } else { Panel1->Color=clRed; Form1->ComThread->Suspend(); unsigned long int ByteSend=0; LPDWORD lpNumberOfBytesWritten=&ByteSend; unsigned char TrByte; LPCVOID lpBuffer2=&TrByte; TrByte=1; WriteFile(Form1->hCom, lpBuffer2, 1, lpNumberOfBytesWritten, NULL); Form1->ComThread->Resume(); } } } //--------------------------------------------------------- После записи в порт поток запускаю снова командой Resume(). Когда я удаляю поток чтения из программы, то передача в порт работает исправно, а когда снова подключаю прога виснет при попытке передавать в порт. почему так может быть? |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |