Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программа жрет ресурсы 
:(
    Опции темы
Albles
Дата 14.1.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Подскажите, пожалуйста кто знает - почему программа может жрать ресурсы - загрузка процессора 90-99%. Все начинает тормозить.

Код

__fastcall Potok::Potok(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall Potok::Execute()
{
while(!Terminated)
    {
     Com_port();
     }
}
void __fastcall Potok::Com_port()
{
здесь код потока
}


В потоке обмениваюсь с микроконтроллером через сом-порт. Чем дольше время выполнения этого кода потока, тем больше все тормозит.
PM MAIL   Вверх
Alca
Дата 14.1.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

void __fastcall Potok::Com_port()
{
    //?????????????
}


Добавлено через 59 секунд
А если в Com_port() ::Sleep(N) впихнуть?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Albles
Дата 14.1.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



А что это даст? Мне нужно, чтобы обновление данных с контроллера происходило максимально быстро.
PM MAIL   Вверх
Alca
Дата 14.1.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

А что это даст?

будет меньше проц грузиться

Цитата

почему программа может жрать ресурсы

Цитата

А что это даст? Мне нужно, чтобы обновление данных с контроллера происходило максимально быстро.

Ты определись, что тебе надо



--------------------
PM WWW ICQ Skype Jabber   Вверх
Alexeis
Дата 14.1.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Alca @  14.1.2010,  14:36 Найти цитируемый пост)
А если в Com_port() ::Sleep(N) впихнуть? 

  А еще лучше усыпить поток только на время отсутствия операций. Например при помощи WaitForSingleObject .
Вообще вариантов просто куча см. Serial Communications in Win32

Добавлено через 2 минуты и 55 секунд
Цитата(Alca @  14.1.2010,  14:53 Найти цитируемый пост)
Ты определись, что тебе надо

Можно иметь и то и другое. Винда по прерыванию от компорта переключает евент, ос проверяет его состояние и будит поток насколько быстро насколько может. Тем быстрее чем выше приоритет потока.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alca
Дата 14.1.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Overlapped I/O

Overlapped I/O is not as straightforward as nonoverlapped I/O, but allows more flexibility and efficiency.


Добавлено через 43 секунды
Код

void __fastcall Potok::Com_port()
{

     smile 
Код

}



--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 14.1.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Albles @  14.1.2010,  15:35 Найти цитируемый пост)
Чем дольше время выполнения этого кода потока, тем больше все тормозит. 

было бы интересно оценить код опроса самого порта.
PM MAIL   Вверх
Albles
Дата 14.1.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



спасибо, буду пробовать
PM MAIL   Вверх
Alca
Дата 14.1.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

было бы интересно оценить код опроса самого порта.

стопудово вертушка


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alexeis
Дата 14.1.2010, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Alca, что ты хочешь сказать этой цитатой? Не сказано, что быстродействие хуже. Говориться лишь что работа в режиме Overlapped сложнее, но гибче и эффективнее. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alca
Дата 14.1.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Alexeis, ты сам перевел, то что я хотел сказать.  smile 



--------------------
PM WWW ICQ Skype Jabber   Вверх
Albles
Дата 14.1.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



да код большой - там много других операций по обработке принимаемых данных,  а подпрограмма запрос-чтение такая:

Код

//=============================================================
//--------- ÇÀÏÈÑÜ ÄÀÍÍÛÕ Â ÏÎÐÒ, ÏÀÓÇÀ È ×ÒÅÍÈÅ -----------------------------
//=============================================================
int __fastcall Write_Port(HANDLE handle,
                          char *buf_wr,
                          char *buf_rd,
                          int num_bwr,
                          int num_brd)
{
BOOL fSuccess;
DWORD ByteCount;

  OVERLAPPED o;
  o.Internal    =0;
  o.InternalHigh=0;
  o.Offset      =0;
  o.OffsetHigh  =0;
  o.hEvent=CreateEvent(NULL,false,false,NULL);

PurgeComm(handle,PURGE_TXCLEAR|PURGE_RXCLEAR); // Î÷èñòêà î÷åðåäåé ïðèåìà è ïåðåäà÷è â äðàéâåðå

fSuccess =WriteFile(handle,buf_wr,num_bwr,&ByteCount,&o);
   if (!fSuccess)
   {
     ShowMessage("Îøèáêà çàïèñè â ïîðò");
      return(0);
   }
//--- ïàóçà
if (buf_wr[1] == 0x10) Delay (num_bwr/4+10); // 10ìñ íà çàïèñü ôëýø
else Delay(num_bwr/4);  // ïàóçà = çàïðîñ

//--- ÷òåíèå
COMSTAT  stat;
DWORD    err;

ByteCount=0;

for(int i=0;i<30;i++)
  {
      ClearCommError(handle,&err,&stat);
//      if(stat.cbInQue>0)
      if(stat.cbInQue==num_brd)// â áóôåðå ââîäà ïðèíÿòû âñå áàéòû?
        { fSuccess =ReadFile(handle,buf_rd,num_brd,&ByteCount,&o); // ÷èòàåì áóôåð
          break; }
      else   Delay (1);
  }

//--- çàâåðøåíèå

CloseHandle(o.hEvent);  // Çàêðûòü ñîáûòèÿ
return ((int) ByteCount);
}
//------ Îêîí÷àíèå -------------------------------------------


PM MAIL   Вверх
Albles
Дата 14.1.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



заменил свои Delay на Sleep и помогло, Спасибо!
PM MAIL   Вверх
Alca
Дата 14.1.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



А че у тебя за Delay было?

Добавлено через 5 минут и 12 секунд
Вместо слипа лучше юзать Event + WaitForSingleObject - меньше грузит проц.


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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