timer.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. # A simple timer class.  You can derive a subclass of Timer
  3. # to provide a simple mechanism for scheduling events:
  4. #
  5. #  $self sched $delay -- causes "$self timeout" to be called
  6. # $delay seconds in the future
  7. # $self cancel    -- cancels any pending scheduled callback
  8. Class Timer
  9. Timer instproc init { ns } {
  10. $self set ns_ $ns
  11. }
  12. # sched is the same as resched; the previous setting is cancelled
  13. # and another event is scheduled. No state is kept for the timers.
  14. # This is different than the C++ timer API in timer-handler.cc,h; where a 
  15. # sched aborts if the timer is already set. C++ timers maintain state 
  16. # (e.g. IDLE, PENDING..etc) that is checked before the timer is scheduled.
  17. Timer instproc sched delay {
  18. $self instvar ns_
  19. $self instvar id_
  20. $self cancel
  21. set id_ [$ns_ after $delay "$self timeout"]
  22. }
  23. Timer instproc destroy {} {
  24. $self cancel
  25. }
  26. Timer instproc cancel {} {
  27. $self instvar ns_
  28. $self instvar id_
  29. if [info exists id_] {
  30. $ns_ cancel $id_
  31. unset id_
  32. }
  33. }
  34. # resched and expire are added to have a similar API to C++ timers.
  35. Timer instproc resched delay {
  36. $self sched $delay 
  37. }
  38. # the subclass must provide the timeout function
  39. Timer instproc expire {} {
  40. $self timeout
  41. }
  42. # Interface timers
  43. Class Timer/Iface -superclass Timer
  44. Timer/Iface instproc init { protocol source group oiface sim} {
  45. $self instvar proto_ src_ grp_ oif_
  46. $self next $sim
  47. set proto_ $protocol
  48. set src_ $source
  49. set grp_ $group
  50. set oif_ $oiface
  51. }
  52. Timer/Iface instproc schedule {} {
  53. $self sched [[$self info class] set timeout]
  54. }