Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2013, 13:53   #1
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию Как влияет на ПО Embarcadero XE в фоне?

Возник интересный и весьма меня нервирующий аспект.
Есть программа, написанная на С++, которая работает с СОМ-портом, частота прихода сообщений - 5 Гц., с такой же частотой и читается. Информация читается побайтово.
При запуске через Embarcadero все нормально. Если же запускать полученный .ехе, то сообщения начинают читаться с частотой примерно 1 Гц., т.е. в 5 раз медленнее.
При этом если просто запустить Embarcadero (даже не открывая никаких проектов) написанная программа сразу переходит в нормальный режим работы, а при выключении - 1 Гц.

Вопрос: что такого делает Embarcadero при запуске? Может это связанно с какой-то настройкой проекта?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.05.2013, 14:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как ты определил частоту?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2013, 15:02   #3
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

"На глаз"

Погрешность в +/- 2 Гц не существенна, ибо программа без Embarcadero в фоне работает явно медленнее.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.05.2013, 15:48   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Если проект написан с динамической линковкой, то, может, ускоряется процесс обращения к каким-то внешним функциям за счёт уже подгруженных средой библиотек... Хотя, по идее, запуск под отладчиком должен замедлять работу.
FataLL вне форума Ответить с цитированием
Старый 28.05.2013, 16:17   #5
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Статическая линковка.

Проблема в том, что возникает такая ситуация:
1) Запускаю ПО, оно тормозит
2) Запускаю Embarcadero (только запускаю, не открываю проектов, вообще ничего не делаю), ПО резко выправляется и работает правильно
3) Закрываю Embarcadero, тормоза моментально возвращаются
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.05.2013, 16:30   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Может, это наоборот, не тормоза, а более быстрая работа? Например, успевает сработать какой-нибудь Event на ожидание, что при более медленной работе не происходит?
FataLL вне форума Ответить с цитированием
Старый 28.05.2013, 16:48   #7
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Event есть только один, ожидающий прихода сообщений в com-порт. Взводится он должен в любом случае, время ожидания взвода - infinite.
Сомневаюсь, что он может подвисать аж на секунду, т.к. данные идут практически непрерывно.
Да и не захватывает Embarcadero программу никоим образом. Странно это все.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.05.2013, 17:05   #8
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Современные компьютеры способны сделать чёрта лысого между двумя "практически непрерывными" моментами :-) Event борландский или виндовый? Можно было бы этот участок кода выложить, чтоб было предметно. Или наставить отладочного вывода, что именно и когда происходит, а потом анализировать. Наверняка будет разница. Я только предполагаю, что программа может зайти в Event и сразу выйти [случай с загруженной средой], а может не увидеть данных и задержаться до следующей проверки [без E]. Т.е., я думаю, что наличие среды в памяти "замедляет" работу за счёт каких-нибудь манипуляций системы с подкачкой, потоками и т.д., которые отжирают время у программы, что позволяет ей всегда получать данные "вовремя", компенсируя задержку их появления.
FataLL вне форума Ответить с цитированием
Старый 28.05.2013, 17:05   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
программа без Embarcadero в фоне работает явно медленнее.
А тип сборки случайно не Debug?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2013, 17:11   #10
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Event виндовый.
Код:
DWORD WINAPI GetThread(LPVOID)
{
 COMSTAT comstat;
 DWORD btr,mask,signal;
 PurgeComm(hCom,PURGE_RXCLEAR);
 overlapped.hEvent=CreateEvent(NULL,true,true,NULL);
 SetCommMask(hCom,EV_RXCHAR);
 while(1)
  {
	WaitCommEvent(hCom,&mask,&overlapped);
	signal = WaitForSingleObject(overlapped.hEvent,INFINITE);
	if(signal == WAIT_OBJECT_0)
	 {
	   if(GetOverlappedResult(hCom,&overlapped,&temp,true))
		if((mask & EV_RXCHAR) != 0)
		 {
		   ClearCommError(hCom,&temp,&comstat);
		   btr = comstat.cbInQue;
		   if(btr >= 1)
			 {
			   GET_RS((int)btr);
			 }
		  }
	 }
  }
}
GET_RS - цикл for, набивающий буфер данными.

Debug, Release - эффект одинаков.

Цитата:
Т.е., я думаю, что наличие среды в памяти "замедляет" работу за счёт каких-нибудь манипуляций системы с подкачкой, потоками и т.д., которые отжирают время у программы, что позволяет ей всегда получать данные "вовремя", компенсируя задержку их появления.
Красивый вариант, но, думаю, трудноуловимый и трудновоспроизводимый.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как влияет музыка на человека Ёжик в тумане Свободное общение 26 01.11.2012 15:03
Как изменить ширину картинки на фоне? Try HTML и CSS 0 16.09.2009 22:57
Картинка на фоне MDI формы... Как? masterdela Общие вопросы Delphi 4 13.01.2009 14:41