[Ruby] Tk.mainloop ест 99% cpu

Vladimir V. Zdorovenco halflife at moldova.cc
Tue Feb 4 18:44:04 MSK 2003


Всем привет.

Я тут вот с Ruby/Tk эксперементировал, случайно сабж заметил. Может кто знает 
как поправить или чем более нормальным заменить ?

Более нормальным потому как написан tcltklib.c на мой взгляд давольно таки 
неправильно. Непонятно зачем автор в Tcl_DoOneEvent параметр TCL_DONT_WAIT 
вписал, если до этого был создан timer handler (Tk_CreateTimerHandler). Также 
куча ненужных объявлений, например:

_timer_for_tcl(clientData)
    ClientData clientData;
{
	
    struct invoke_queue *q, *tmp;
    VALUE thread;
...
которые потом нигде не юзаются, правда может я не совсем все правильно 
понимаю. 

продолжение этой же функции:
    /* rb_thread_schedule(); */
    timer_tick += event_loop_max;

ну просто совсем непонятно, зачем это надобыло делать ?

Если кому потестить захочется, дабы самому не писать, пример прилогается.

-- 
Всего хорошего,
	Владимир (e-mail: halflife at moldova doc cc)
-------------- next part --------------
require 'tk'
require 'tkclass'

@mdel = 10
def translate(x, y)
	return (x / @mdel * @mdel), (y / @mdel * @mdel)
end


#Thread.new {
#	while (true) do
#		print 'some action ...', "\n"
#		sleep 1		
#	end
#}

def newGlyphWindow
	root = TkToplevel.new { title 'Glyph editor' }
	canvas = TkCanvas.new (root)

	canvas.pack
	canvas.bind('1', proc { |e|
        	x, y = translate(e.x, e.y);
                TkcRectangle.new(canvas, x, y, x + @mdel, y + @mdel)})
end

#Thread.new {
#	newGlyphWindow()
#	Tk.mainloop
#}
newGlyphWindow()
Tk.mainloop


More information about the Ruby mailing list