Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Максимум минимума или оптимизация проги! 
:(
    Опции темы
PSYx
Дата 21.9.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 19.9.2005
Где: Украина Харьков

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



Я хо4у загнать в трэй прогу, которая будет пинговать каждую минуту машину в сети(по IP-шнику), но при этом(та4ка у меня слабая Р2-233 smile ) потребляля минимум ресурсов! Так вот меня интересует: нельзя ли обойтись без таймера, а ,скажем, перехватывать системное изменение времени на минуту(скажем когда те-же часы сменяют время на минуту- ведь есть же системное сообщение совершающее это!?)???
Ну или по крайней мере подскажите ссыло4ку на статьи по оптимизации своего софта, плз.
Спасибо всем кто откликнулся!

PM MAIL ICQ   Вверх
_hunter
Дата 21.9.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



можеш смело использовать таймер. на загрузку системы он не сильно влияет.
+ можеш процесс пингования запустить в отдельном потоке и Sleep(1000) вписать...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
PSYx
Дата 21.9.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 19.9.2005
Где: Украина Харьков

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



Угу, пасибо, а 4то нас4ёт оптимизации програм в ОБЩЕМ? Нет ссыло4ек? Заранее спасибо!
PM MAIL ICQ   Вверх
_hunter
Дата 21.9.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 21.9.2005, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Что тебе нужно:
1. Сократить потребление процессорного времени, при этом, чтобы программа откликалась на иконку в трее.
2. Сократить потребление оперативной памяти.
Соответственно тебе нужен минимальный размер программы, использование чистого WinAPI, реакция только на сообщения, без дополнительной самодеятельности.
Как этого добиться?
Берешь типовую заготовку минимальной программы на WinAPI, с иконкой в трее.
Качаешь с сайта KOL SysDcu7 (переписанные system.pas и sysinit.pas), кладешь dcu'шки в папку с программой.
Использовать в программе только модули Windows и Messages.
Вот тебе готовая заготовка:
Код

program TraySample;

uses
  Windows, Messages;

{$R tsample.res}

const
 WM_TIMER = $0113;
 TIMER_ID = $2BA3;
 WM_TRAYICON=WM_APP+1; // сообщение от трей иконки
 TRAY_ID=$A77E; // идентификатор иконки в трее
 MY_CLASS='MyTClass'; // класс для регистрации в системе
 MY_NAME='TraySample'; // так меня зовут 
 TIMER_INTERVAL_VALUE=60000; // период срабатывания в миллисекундах
var
 MainMsg: TMSG;      // для передачи сообщений

type
  PNotifyIconData = ^TNotifyIconData; // структура для работы с иконкой в трее
  TNotifyIconData = record
    cbSize: DWORD;
    Wnd: HWND;
    uID: UINT;
    uFlags: UINT;
    uCallbackMessage: UINT;
    hIcon: HICON;
    szTip: array [0..63] of AnsiChar;
  end;

 // Служебные функции -----------------------------------------

function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall; external 'shell32.dll' name 'Shell_NotifyIconA';

 // добавить иконку в трей
function TaskBarAddIcon(hWindow: HWND; ID: Cardinal; ICON: hIcon;
 CallbackMessage: Cardinal; Tip: PChar): Boolean;
var
  NID: TNotifyIconData;
begin
  FillChar(NID, SizeOf(TNotifyIconData), 0);
  with NID do begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd   := hWindow;
    uID    := ID;
    uFlags := 7; // MESSAGE or ICON or TIP
    uCallbackMessage := CallbackMessage;
    hIcon  := Icon;
    lstrcpyn(szTip, Tip, SizeOf(szTip));
  end;
  Result := Shell_NotifyIcon(0, @NID); // AddIcon
end;

 // удалить иконку из трея
function TaskBarDeleteIcon(hWindow: HWND; ID: Integer): Boolean;
var
  NID: TNotifyIconData;
begin
  FillChar(NID, SizeOf(TNotifyIconData), 0);
  with NID do begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd    := hWindow;
    uID    := ID;
  end;
  Result := Shell_NotifyIcon(2, @NID); // DeleteIcon
end;

 // всплывалка менюшки
procedure PopupMenu(hWin: HWND);
var
 Menu: hMenu;
 Popup: hMenu;
 P: TPoint;
begin
 Menu := LoadMenu(hInstance, 'MAINMENU');
 Popup := GetSubMenu(Menu, 0);
 GetCursorPos(P);
 SetForegroundWindow(hWin);
 TrackPopupMenu(Popup, TPM_LEFTBUTTON, P.X, P.Y, 0, hWin, NIL);
 PostMessage(hWin, WM_NULL, 0, 0);
 DestroyMenu(Menu);
end;


 // Основные функции -------------------------------------------------

procedure OnTimer(hWin: hwnd);
begin
  // тут действие по таймеру
  MessageBox(0, 'Минута прошла','Таймер говорит:',0);
end;

procedure OnCreate(hWin: hwnd); // Вызывается при старте программы
begin
  // пихаем иконку в трей
  TaskBarAddIcon(hWin, TRAY_ID, LoadIcon(hInstance, 'MAINICON'),
  WM_TRAYICON, MY_NAME);
  SetTimer(hWin, TIMER_ID, TIMER_INTERVAL_VALUE, nil);
end;

procedure OnDestroy(hWin: hwnd); // Вызывается при выходе из программы
begin
  TaskBarDeleteIcon(hWin, TRAY_ID); // прибить иконку
  KillTimer(hWin, TIMER_ID); // остановить таймер
end;

// Обработка сообщений windows
function MainWndProc(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: WPARAM): Integer; stdcall; export;
begin
  Result:=0;
  case uMsg of
    WM_CREATE: OnCreate(hWin); // при старте программы
    WM_TIMER: OnTimer(hWin);   // по таймеру
    WM_TRAYICON: if wp=TRAY_ID then // при клике по трей иконке
      case lp of
        WM_RBUTTONDOWN: PopupMenu(hWin); //всплыть менюшке
        WM_LBUTTONDBLCLK: PostMessage(hWin, WM_COMMAND, 29, 0); //def в меню
      end;
    WM_COMMAND: // вызов комманды меню
      case LoWord(wp) of
        29: MessageBox(hWin, 'Угу','Гугу',0);
        30: PostMessage(hWin, WM_DESTROY, 0, 0); // выход
      end;
    WM_DESTROY: begin // умираем
        OnDestroy(hWin);
        PostQuitMessage(0); // умереть
      end;
    else Result:=DefWindowProc(hWin, uMsg, wp, lp); // прочие события
  end;
end;

procedure RegMWindow; // создать главное окно
var WClass:  TWndClass; // описатель главного окна
begin
  FillChar(wClass, SizeOf(wClass), 0);
  wClass.lpfnWndProc:=@MainWndProc;
  wClass.hInstance:=HInstance;
  wClass.lpszClassName:=MY_CLASS;
  RegisterClass(wClass); // регестрируемся в системе
  CreateWindowEx(WS_EX_TOOLWINDOW,MY_CLASS,MY_NAME,
                 WS_POPUP, 0, 0, 0, 0, 0, 0, hInstance, nil); // создаем окно
  //SetPriorityClass(GetCurrentProcess, IDLE_PRIORITY_CLASS); // низкие приоритет
end;

BEGIN
  // тут проверяем, если уже запущены, то отваливаем
  if FindWindow(MY_CLASS,nil)<>0 then Halt;

  RegMWindow; // создать окно

  while GetMessage(MainMsg,0,0,0) do begin // цикл обработки сообщений
    TranslateMessage(MainMsg);
    DispatchMessage(MainMsg);
  end;
END.

Приаттачиваю полный проект.
В комплекте:
- данный код
- измененные dcu'шки system и sysinit (для уменьшения размера)
- иконка для трея, файл ресурсов, откомпиленный файл ресурсов с иконкой и попупкой
- батник, чтобы все это собрать в exe
- готовый exe размером 8.5 килобайт
Потребление системных ресурсов 0.000000000001%, кушает памяти 532кб (без учета kernel и user.dll)
Добавлено @ 14:00
P.S. заготовку писал и оптимизировал сам под минимальный размер. Реально проект весит 2.9кб, сверх пустого ехешника (5.6кб)

Присоединённый файл ( Кол-во скачиваний: 154 )
Присоединённый файл  TraySample.zip 67,53 Kb
PM MAIL   Вверх
Snowy
Дата 21.9.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Вот. К заготовке приделал ping.
Приклеиваю готовый вариант пинговалки.
Если пинг не проходит, то кричит страшными сообщениями (заменить на свой вариант).
Адрес пингуемого компутера прописан в начале кода. Можно заменить на любой или вообще перенести в var и заказывать из коммандной строки, реестра или файла.
Вобщем переделывай под себя как хочешь.
Добавлено @ 15:01
P.S. ехешник подрос до 10кб.

Присоединённый файл ( Кол-во скачиваний: 208 )
Присоединённый файл  Pinger.zip 69,00 Kb
PM MAIL   Вверх
PSYx
Дата 22.9.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 19.9.2005
Где: Украина Харьков

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



У-у-у-ух пасибо! Snowy! Реально пасиба! В основном за совет по оптимизации!
Добавлено @ 12:34
Э-э-э-э-э, Хантер, а 4ё это за ссыло4ка такая весёлеькая? Никуда не ведущая?
PM MAIL ICQ   Вверх
_hunter
Дата 22.9.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



почему не ведущая? прекрасно ведет...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 22.9.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Цитата(_hunter @ 22.9.2005, 12:41)
почему не ведущая? прекрасно ведет...

И ведет она на гугль и гугль рекомендует книгу "Дельфи глазами хакера".
А про эту книгу на форуме уже куча матов сложена.
Лучше я на пальцах расскажу, где и как можно уменьшить программу.
PM MAIL   Вверх
PSYx
Дата 23.9.2005, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 19.9.2005
Где: Украина Харьков

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



Млин сори то у меня связь такая- глю4ит всё 4ё можно и нельзя!
Добавлено @ 11:59
Та не! Это у меня просто smile (ничего себе- просто) шрифты глю4ат! На каком язе ссылка?
PM MAIL ICQ   Вверх
Snowy
Дата 23.9.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Ссылка просто ведет на гугль, автоматом введен запрос "Оптимизирование программ Delphi".
То же можешь сделать сам вручную с любым поисковиком.
PM MAIL   Вверх
_hunter
Дата 23.9.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



на русском была... ( utf-8, кажись... )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
aalor
Дата 11.11.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну так вот продолжение - по этому способу у мя в проге всё нормально, но, мне нуна динамическое создание popupmenu а в том примере popup привязан статически
PM MAIL   Вверх
_hunter
Дата 11.11.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



menu: TPopupMenu в var' е
menu := TPopupMenu.Create() и menu.Popup(); там, где его создать нужно
у и про освобождение не забываем...



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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