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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2013, 00:58   #1
Muvvka
Пользователь
 
Аватар для Muvvka
 
Регистрация: 27.04.2012
Сообщений: 18
По умолчанию функции внутри класса...

значит суть вопроса такова есть класс например:
Код:
class Timer
{                         //|новый класс "таймера"
private:                  //|приватные переменные
int interval;             //|интервал между "тиками"
public:                   //|публичные переменные
Timer(int interval)       //|конструктор класса
{                         //|
this->interval=interval;  //|пишем интервал
Time1();                  //|вызываем наш таймер
}                         //|
void Time1()              //|собственно сам таймер
{                         //|представляет из себя
Sleep (interval);         //|функцию с задержкой
Time1();                  //|и с сылкой на саму
}                         //|себя.
~Timer()                  //|деструкторор
{                         //|
interval=0;               //|ложит функцию баюшки
}                         //|
};
хотелось бы поинтересоваться и узнать ваше мнение по поводу циклов
сам вопрос: как лучше и правильнее всего было бы сделать такой класс. к примеру делать так как написано выше или же лучше и правельнее использовать "операторы цикла" тк в классах как я понял вроде все функции стоят по умолчанию inline при использовании циклов выдаёт предупреждение Functions containing for are not expanded inline как я понял функция в результате не будет inline. хочу узнать мнение форумчан по этому поводу! и собственно в дополнение ещё такой вопрос при каком из способов прога будет "кушать" меньше ресурсов?
помогите кто знает понять что такое хорошо и что такое полхо.
Muvvka вне форума Ответить с цитированием
Старый 24.06.2013, 07:51   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Лучше сделать циклом. Сейчас таймер сработает только раз, дальше будет виснуть и ничего не делать и дело закончится stack overflow - Time1 будет вызывать себя до бесконечности.
waleri вне форума Ответить с цитированием
Старый 24.06.2013, 10:30   #3
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

И лучше не вызывать функцию Time1 из конструктора...
FataLL вне форума Ответить с цитированием
Старый 24.06.2013, 20:23   #4
Muvvka
Пользователь
 
Аватар для Muvvka
 
Регистрация: 27.04.2012
Сообщений: 18
По умолчанию

Цитата:
Time1 будет вызывать себя до бесконечности
я знаю.
Цитата:
И лучше не вызывать функцию Time1 из конструктора..
спосибо вот такой код написанный правда дня за 2-3 до ответа.
Код:
class Run
{
public:
Run(char* pName)
{
pID=0;
this->pName=pName;
cycle();
}
bool cycle()
{
Sleep (500);
if(pID==0){UpdatepID();}
if(pID!=0&&Scaner1())
{
Sleep (100);
Patcher0();
Sleep (2000);
Patcher1();
cout<<"patched -->"<<pName<<"\n";
return true;
}
cycle();
return false;
}
void UpdatepID()
{
PROCESSENTRY32 Pe32;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Pe32.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnap, &Pe32);
while (Process32Next(hSnap, &Pe32))
{
if(stricmp(Pe32.szExeFile, pName)==0)
{
pID=Pe32.th32ProcessID;
cout<<pID<<"\n";
break;
}
}
CloseHandle(hSnap);
}
Run& Patcher0()
{
DWORD a=0x71A67214;
DWORD b=0;
HANDLE hdl = OpenProcess(PROCESS_ALL_ACCESS,0,pID);
WriteProcessMemory(hdl, (LPVOID)a, (LPVOID)&b, 1, 0);
CloseHandle(hdl);
return *this;
}
Run& Patcher1()
{
DWORD a=0x71A67214;
DWORD b=1;
HANDLE hdl = OpenProcess(PROCESS_ALL_ACCESS,0,pID);
WriteProcessMemory(hdl, (LPVOID)a, (LPVOID)&b, 1, 0);
CloseHandle(hdl);
return *this;
}
bool Scaner1()
{
HANDLE hdl = OpenProcess(PROCESS_ALL_ACCESS,0,pID);
DWORD a=0x71A67214;DWORD b;
ReadProcessMemory(hdl,(LPCVOID)a, &b, 1, 0);
CloseHandle(hdl);
if(b!=0){return true;}
Scaner1();
return false;
}
~Run()
{

}
private:
char* pName;
DWORD pID;
};
так нормально было бы?
Muvvka вне форума Ответить с цитированием
Старый 24.06.2013, 20:58   #5
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Нет, не нормально. Причины - те же. Зачем вызывать себя до бесконечности? Прога зависнет достаточно быстро...
FataLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатель на объект внутри класса WildTaburet Visual C++ 1 01.10.2012 14:34
ооп класс внутри класса Abuhamed PHP 2 02.04.2012 22:07
Класс внутри класса Prontit Общие вопросы Delphi 16 07.10.2011 08:30
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться zipwind C++ Builder 1 09.04.2011 17:18
Локальные хуки внутри класса Impuls1989 Общие вопросы Delphi 12 27.07.2010 20:47