Class: TkRTTimer
Constant Summary collapse
- DEFAULT_OFFSET_LIST_SIZE =
5
Constants inherited from TkTimer
TkTimer::DEFAULT_IGNORE_EXCEPTIONS, TkTimer::TkCommandNames, TkTimer::Tk_CBTBL
Constants included from TkCore
TkCore::EventFlag, TkCore::INTERP, TkCore::INTERP_MUTEX, TkCore::INTERP_ROOT_CHECK, TkCore::INTERP_THREAD, TkCore::INTERP_THREAD_STATUS, TkCore::RUN_EVENTLOOP_ON_MAIN_THREAD, TkCore::WIDGET_DESTROY_HOOK, TkCore::WITH_ENCODING, TkCore::WITH_RUBY_VM
Constants included from TkComm
TkComm::GET_CONFIGINFO_AS_ARRAY, TkComm::GET_CONFIGINFOwoRES_AS_ARRAY, TkComm::TkExtlibAutoloadModule, TkComm::Tk_CMDTBL, TkComm::Tk_IDs, TkComm::Tk_WINDOWS, TkComm::USE_TCLs_LIST_FUNCTIONS, TkComm::WidgetClassNames
Constants included from TkUtil
TkUtil::None, TkUtil::RELEASE_DATE
Instance Attribute Summary
Attributes inherited from TkTimer
#after_id, #after_script, #current_args, #current_proc, #current_sleep, #loop_exec, #return_value
Instance Method Summary collapse
- #cancel ⇒ Object (also: #stop)
- #cb_call ⇒ Object
- #continue(wait = nil) ⇒ Object
-
#initialize(*args, &b) ⇒ TkRTTimer
constructor
A new instance of TkRTTimer.
- #set_interval(interval) ⇒ Object
- #set_next_callback(args) ⇒ Object
- #start(*args, &b) ⇒ Object
Methods inherited from TkTimer
#add_procs, #at_end, callback, #cancel_on_exception=, #cancel_on_exception?, #current_status, #delete_at, #delete_procs, #do_callback, #eventloop_tkwait, #eventloop_wait, #get_procs, info, #info, #loop_rest, #loop_rest=, #reset, #restart, #running?, #set_callback, #set_procs, #set_start_proc, #skip, start, #thread_tkwait, #thread_wait, #tkwait, #wait
Methods included from TkCore
#_tk_call_to_list_core, #after, #after_cancel, #after_idle, #appname, #appsend, #appsend_deny, #appsend_displayof, callback, #callback_break, #callback_continue, #callback_return, #chooseColor, #chooseDirectory, #do_one_event, #event_generate, #getMultipleOpenFile, #getMultipleSaveFile, #getOpenFile, #getSaveFile, #get_eventloop_tick, #get_eventloop_weight, #get_no_event_wait, #inactive, #inactive_displayof, #info, #ip_eval, #ip_eval_with_enc, #ip_eval_without_enc, #ip_invoke, #ip_invoke_with_enc, #ip_invoke_without_enc, #is_mainloop?, #load_cmd_on_ip, #mainloop, #mainloop_exist?, #mainloop_thread?, #mainloop_watchdog, #messageBox, #rb_appsend, #rb_appsend_displayof, #reset_inactive, #reset_inactive_displayof, #restart, #scaling, #scaling_displayof, #set_eventloop_tick, #set_eventloop_weight, #set_no_event_wait, #tk_call, #tk_call_to_list, #tk_call_to_list_with_enc, #tk_call_to_list_without_enc, #tk_call_to_simplelist, #tk_call_to_simplelist_with_enc, #tk_call_to_simplelist_without_enc, #tk_call_with_enc, #tk_call_without_enc, #windowingsystem
Methods included from TkComm
_at, _callback_entry?, _callback_entry_class?, _curr_cmd_id, _fromUTF8, _genobj_for_tkwidget, _next_cmd_id, _toUTF8, array2tk_list, #bind, #bind_all, #bind_append, #bind_append_all, #bind_remove, #bind_remove_all, #bindinfo, #bindinfo_all, bool, image_obj, #install_cmd, install_cmd, list, num_or_nil, num_or_str, number, procedure, simplelist, slice_ary, string, #subst, tk_tcl2ruby, uninstall_cmd, #uninstall_cmd, window
Methods included from TkEvent
#install_bind, #install_bind_for_event_class
Methods included from TkUtil
#_conv_args, _conv_args, #_fromUTF8, #_get_eval_enc_str, _get_eval_enc_str, #_get_eval_string, _get_eval_string, _symbolkey2str, #_symbolkey2str, #_toUTF8, #bool, bool, callback, eval_cmd, #hash_kv, hash_kv, install_cmd, #num_or_nil, num_or_nil, num_or_str, #num_or_str, number, #number, string, #string, uninstall_cmd, untrust
Constructor Details
#initialize(*args, &b) ⇒ TkRTTimer
Returns a new instance of TkRTTimer.
540 541 542 543 544 545 546 547 |
# File 'lib/tk/timer.rb', line 540 def initialize(*args, &b) super(*args, &b) @offset_list = Array.new(DEFAULT_OFFSET_LIST_SIZE){ [0, 0] } @offset_s = 0 @offset_u = 0 @est_time = nil end |
Instance Method Details
#cancel ⇒ Object Also known as: stop
556 557 558 559 560 561 |
# File 'lib/tk/timer.rb', line 556 def cancel super() @est_time = nil @cb_start_time = Time.now self end |
#cb_call ⇒ Object
645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 |
# File 'lib/tk/timer.rb', line 645 def cb_call if @est_time @offset_list.shift @cb_start_time = Time.now if @current_sleep == 0 @offset_list.push([ @offset_s - @cb_start_time.to_i, @offset_u - @cb_start_time.usec ]) else @offset_list.push([ @offset_s + (@est_time.to_i - @cb_start_time.to_i), @offset_u + (@est_time.usec - @cb_start_time.usec) ]) end end @cb_cmd.call end |
#continue(wait = nil) ⇒ Object
564 565 566 567 568 |
# File 'lib/tk/timer.rb', line 564 def continue(wait=nil) fail RuntimeError, "is already running" if @running @cb_start_time = Time.now super(wait) end |
#set_interval(interval) ⇒ Object
570 571 572 573 |
# File 'lib/tk/timer.rb', line 570 def set_interval(interval) super(interval) @est_time = nil end |
#set_next_callback(args) ⇒ Object
591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 |
# File 'lib/tk/timer.rb', line 591 def set_next_callback(args) if @running == false || @proc_max == 0 || @do_loop == 0 Tk_CBTBL.delete(@id) ;# for GC @running = false # @wait_var.value = 0 __at_end__ return end if @current_pos >= @proc_max if @do_loop < 0 || (@do_loop -= 1) > 0 @current_pos = 0 else Tk_CBTBL.delete(@id) ;# for GC @running = false # @wait_var.value = 0 __at_end__ return end end @current_args = args cmd, *cmd_args = @loop_proc[@current_pos] @current_pos += 1 @current_proc = cmd @offset_s, @offset_u = _offset_ave if TkComm._callback_entry?(@sleep_time) sleep = @sleep_time.call(self) else sleep = @sleep_time end if @est_time @est_time = Time.at(@est_time.to_i, @est_time.usec + sleep*1000) else @est_time = Time.at(@cb_start_time.to_i, @cb_start_time.usec + sleep*1000) end now = Time.now real_sleep = ((@est_time.to_i - now.to_i + @offset_s)*1000.0 + (@est_time.usec - now.usec + @offset_u)/1000.0).round if real_sleep <= 0 real_sleep = 0 @offset_s = now.to_i @offset_u = now.usec end @current_sleep = real_sleep set_callback(real_sleep, cmd_args) end |
#start(*args, &b) ⇒ Object
549 550 551 552 553 554 |
# File 'lib/tk/timer.rb', line 549 def start(*args, &b) return nil if @running @est_time = nil @cb_start_time = Time.now super(*args, &b) end |