unsigned char mdCommand[6];
mdCommand[0] = 0x20;
mdCommand[1] = 0x02;
mdCommand[2] = 0x02;
mdCommand[3] = 0x00;
mdCommand[4] = 0x20;
mdCommand[5] = 0x01;
SetNastr(mdCommand);
//далее полторы секунды идет настройка и опрос прибора
Sleep(1500);
//после опроса я получаю данные
int ReadByte=512;
unsigned char* usDC=new unsigned char[ReadByte];
GetData(ReadByte,usDC);
//и вывожу на экран
delete usDC;
Приостановка потока
Перед тем как опросить прибо его надо настроить..
Чтото типо этого:
Код:
Так вот когда я выполняю этот код в основном потоке программы она подвисает на полторы секунды.
Если я переношу этот код во второй поток, то основной поток программы все равно подвисает на полторы секунды.
Вопрос: Как еще пожно приостановить поток не используя Sleep()?
Цитата: nILruM
Если я переношу этот код во второй поток, то основной поток программы все равно подвисает на полторы секунды.
Что то сказки рассказываете. Код бы посмотреть либо вывод программы, по которому понимаете, что основной поток тоже подвисает.
Цитата: nILruM
Вопрос: Как еще пожно приостановить поток не используя Sleep()?
А чем вам не устраивает sleep? Что вам собственно нужно то? Вариантов приостановить поток много - собственно любая блокирующая функция. Некоторыми можно даже сэмулировать sleep. Вот только если надо именно приостановить поток на время, то это задача именно sleep.
Код:
int PredTick=0;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Caption=IntToStr(GetTickCount()-PredTick);
PredTick=GetTickCount();
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Caption=IntToStr(GetTickCount()-PredTick);
PredTick=GetTickCount();
}
Так же по нажатию кнопки на форме происходит создание потока:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
BufThread=new NewThread(false);
}
{
BufThread=new NewThread(false);
}
Код класса потока:
Код:
void __fastcall NewThread::Execute()
{
//---- Place thread code here ----
this->Synchronize(Work);
}
void __fastcall NewThread::Work()
{
Form1->Label1->Caption="Начало паузы";
Sleep(1500);
Form1->Label1->Caption="Конец паузы";
}
{
//---- Place thread code here ----
this->Synchronize(Work);
}
void __fastcall NewThread::Work()
{
Form1->Label1->Caption="Начало паузы";
Sleep(1500);
Form1->Label1->Caption="Конец паузы";
}
Так вот при нажатии на кнопку создания потока в заголовке отображается значение 1560, а должно быть в районе 100
Цитата: aks
А чем вам не устраивает sleep? Что вам собственно нужно то?
Мне надо чтобы выполнение основного потока не тормозилось на 1,5 секунды..
[COLOR="Silver"]ПыСы. Последователь Архангельского?[/COLOR]
Цитата: Phodopus
[COLOR="Silver"]ПыСы. Последователь Архангельского?[/COLOR]
Архангельского читал, но не сказал бы что последователь))
если конечно грамотно взаимодействовоть с основной
программой.