Russian Qt Forum
Ноябрь 23, 2024, 20:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Встроить ф-цию  (Прочитано 3448 раз)
blood_shadow
Гость
« : Апрель 28, 2011, 16:20 »

Добрый день,
Например есть кусок кода:
Код
C++ (Qt)
int j = 0;
while (j < 10)
{
   if (sslSocket.waitForReadyRead(1000))
       break;
   ++j;
 
   if (stopped)
       break;
}
 

его надо пихать во многие места, но как-то не хочется тратиться на вызовы ф-ций
еще и с циклом внутри, если просто подставить тут без макросов никак?
инлайновой ее никак нельзя сделать(чтобы не было вызова ф-ции)?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 28, 2011, 16:23 »

Положись на компилятор и не трать время на такие мелочи.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Fat-Zer
Гость
« Ответ #2 : Апрель 28, 2011, 16:35 »

Положись на компилятор и не трать время на такие мелочи.
+1
inline нынче ни на что не влияет... на -O0 компилятор ничего не встраивает, а на -O2 он уже сам решат, что оптимизировать, а что нет. (ещё интересно посмотреть, что на -O1 будет получаться, но чтобы его использовали на практике я не видел...) Так что смело делайте отдельной функцией...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Апрель 28, 2011, 16:38 »

Как-то попадалось __forceinline, можешь погуглить на эту тему, но я бы на твоем месте не заморачивался. Если что, позднее можно будет соптимизировать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
blood_shadow
Гость
« Ответ #4 : Апрель 28, 2011, 16:50 »

Как-то попадалось __forceinline, можешь погуглить на эту тему, но я бы на твоем месте не заморачивался. Если что, позднее можно будет соптимизировать.
кстати, а насчет оптимизации, чем обычно пользуются профайлерами или еще чем?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Апрель 28, 2011, 16:51 »

Можно valgrind, можно самописные тесты. По любому есть куча способов.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 28, 2011, 16:54 »

Например есть кусок кода:
Код
C++ (Qt)
int j = 0;
while (j < 10)
{
   if (sslSocket.waitForReadyRead(1000))
       break;
   ++j;
 
   if (stopped)
       break;
}
 

его надо пихать во многие места, но как-то не хочется тратиться на вызовы ф-ций
еще и с циклом внутри, если просто подставить тут без макросов никак?
инлайновой ее никак нельзя сделать(чтобы не было вызова ф-ции)?
Это выглядит скорее "метод/класс" чем просто ф-ция. Многовато всего вылезает (j, 10, 1000, stopped). Если не хочется наследоваться от sslSocket, можно напр так
Код
C++ (Qt)
class MySocketReader {
public:
 MySocketReader( int timeStep, int numStepMax, QIODevice * device, const bool * stopFlag );
 int Read( void );
 
 enum {
  result_ok = 0,
  result_timeout = -1,
  result_stop = -2,
 };
 ...
};
 
Ну а вопрос об inline просто не стоит т.к. задействовано waitForReadyRead

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.411 секунд. Запросов: 22.