Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не остановить поток, при вызове Suspend программа виснет 
:(
    Опции темы
Valeri
Дата 13.3.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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().
Когда я удаляю поток чтения из программы, то передача в порт работает исправно, а когда снова подключаю прога виснет при попытке передавать в порт. почему так может быть?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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