/tools/jruby-1.5.1/lib/ruby/site_ruby/shared/ffi/times.rb
https://github.com/mingle/oauth2_provider · Ruby · 36 lines · 33 code · 3 blank · 0 comment · 3 complexity · 00e1403ae662f4e2dad53aeb42dfe602 MD5 · raw file
- require 'ffi'
- require 'java'
- module Process
- class Foreign
- SC_CLK_TCK = com.kenai.constantine.platform.Sysconf::_SC_CLK_TCK.value
- extend FFI::Library
- ffi_lib FFI::Library::LIBC
- class Times < FFI::Struct
- layout \
- :utime => :long,
- :stime => :long,
- :cutime => :long,
- :cstime => :long
- end
- attach_function :times, [ :buffer_out ], :long
- attach_function :sysconf, [ :int ], :long
- Tms = Struct.new("Foreign::Tms", :utime, :stime, :cutime, :cstime)
- end
- def self.times
- hz = Foreign.sysconf(Foreign::SC_CLK_TCK).to_f
- t = Foreign::Times.alloc_out(false)
- Foreign.times(t.pointer)
- Foreign::Tms.new(t[:utime] / hz, t[:stime] / hz, t[:cutime] / hz, t[:cstime] / hz)
- end
-
- end
- if $0 == __FILE__
- while true
- 10.times { system("ls -l / > /dev/null") }
- t = Process.times
- puts "utime=#{t.utime} stime=#{t.stime} cutime=#{t.cutime} cstime=#{t.cstime}"
- sleep 1
- end
- end