[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