2015-09-01 2 views
2

Приложите небольшой пример, в котором будет запущен значок в системном трее, используя g gtk2.Уменьшить время загрузки для приложения ruby, построенного на gtk2 и ocra

#!/usr/bin/env ruby 
# encoding: UTF-8 

require 'gtk2' 

si=Gtk::StatusIcon.new 
si.stock=Gtk::Stock::DIALOG_INFO 
si.tooltip='StatusIcon' 
si.signal_connect('activate'){|icon| icon.blinking=!(icon.blinking?)} 

info=Gtk::ImageMenuItem.new(Gtk::Stock::INFO) 
info.signal_connect('activate'){p "Embedded: #{si.embedded?}"; p "Visible: #{si.visible?}"; p "Blinking: #{si.blinking?}"} 
quit=Gtk::ImageMenuItem.new(Gtk::Stock::QUIT) 
quit.signal_connect('activate'){Gtk.main_quit} 
menu=Gtk::Menu.new 
menu.append(info) 
menu.append(Gtk::SeparatorMenuItem.new) 
menu.append(quit) 
menu.show_all 
si.signal_connect('popup-menu'){|tray, button, time| menu.popup(nil, nil, button, time)} 

si.signal_connect('scroll-event'){|icon, event| 
    modifier=event.state#A GdkModifierType indicating the state of modifier keys and mouse buttons 
##Handle only control and shift key 
    ctrl_shift=(Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK) 
    mod=modifier&ctrl_shift 
    case mod 
    when 0 
     print "(None)" 
    when Gdk::Window::CONTROL_MASK 
     print "Control+" 
    when Gdk::Window::SHIFT_MASK 
     print "Shift+" 
    when (Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK) 
     print "Control+Shift+" 
    end 
##Check for direction 
    case event.direction 
    when Gdk::EventScroll::UP 
     print "up\n" 
    when Gdk::EventScroll::DOWN 
     print "down\n" 
    end 
} 

exit if defined?(Ocra) 
Gtk.main 

Это работает в секунду, если я запустить его в качестве рубинового сценария т.е. ruby my_program.rb

Но я хотел бы распространить его, поэтому я выбрал OCRA, который строит мне файл ехе, так что пользователь может запустить он не содержит рубин или его пакеты.

Итак, я запускаю ocra my_program.rb --windows, и он дает мне хороший exe-файл под названием my_program.exe.

Проблема: При запуске my_program.exe загрузка программы составляет 25-30 секунд.

Значок в системном трее занимает 1 секунду и занимает в 30 раз больше, если он был упакован как EXE-файл.

Есть ли возможный способ уменьшить это время загрузки. Заранее большое спасибо.

EDIT: После поднятия головы я изменил создание ocra exe на ocra my_program.rb --windows --no-lzma. Это решение сэкономило мне 10 секунд, и теперь для загрузки программы требуется около 18-20 секунд.

Могу ли я оптимизировать его для более короткого времени загрузки? Пожалуйста помоги.

+3

На первый взгляд: OCRA README заявляет, что он имеет сжатие по умолчанию «Сжатие LZMA (необязательно, по умолчанию включено)». Попробуйте отключить его, это должно уменьшить время загрузки для стоимости файла EXE-файла. – mudasobwa

+0

Обновили ответ. Спасибо за головы. – Supersonic

+1

Возможно, эта дискуссия содержит несколько советов для вас. Http://programming.nullanswer.com/question/28323543 – dimakura

ответ

Смежные вопросы