自分のプロセスの優先度を変える
require 'win32ole' module Win32 NORMAL_PRIORITY_CLASS = 0x00000020 IDLE_PRIORITY_CLASS = 0x00000040 HIGH_PRIORITY_CLASS = 0x00000080 REALTIME_PRIORITY_CLASS = 0x00000100 BELOW_NORMAL_PRIORITY_CLASS = 0x00004000 ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000 def set_self_priority(priority) cls = WIN32OLE.connect("winmgmts:\\\\.\\root\\cimv2") objs = cls.ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId = #{Process.pid}") objs.each do |o| o.SetPriority(priority) end end module_function :set_self_priority end
Win32APIでSetPriorityClassとGetProcessHandleを利用した方が速度面では有利そうな。
もっとも、しょっちゅう変更するものでもないから動けば十分。:-)
objs.eachせずにobjs.item(1)でアクセスできそうなんだけれど…。
irb(main):021:0> objs.item(1) WIN32OLERuntimeError: item OLE error code:80041001 in SWbemObjectSet エラーです HRESULT error code:0x80020009 例外が発生しました。 from (irb):21:in `method_missing' from (irb):21 from :0