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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1993-1994 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *      This product includes software developed by the University of
  16.  *      California, Berkeley and the Network Research Group at
  17.  *      Lawrence Berkeley Laboratory.
  18.  * 4. Neither the name of the University nor of the Laboratory may be used
  19.  *    to endorse or promote products derived from this software without
  20.  *    specific prior written permission.
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32.  * SUCH DAMAGE.
  33.  */
  34. static const char rcsid[] =
  35.     "@(#) $Header: /cvsroot/otcl-tclcl/tclcl/timer.cc,v 1.4 1997/09/27 10:19:52 tecklee Exp $ (LBL)";
  36. extern "C" {
  37. #include <sys/types.h>
  38. #ifndef WIN32
  39. #include <sys/time.h>
  40. #endif        
  41. }
  42. #include "tclcl.h"
  43. #include "timer.h"
  44. Timer::Timer() : token_(0)
  45. {
  46. }
  47. Timer::~Timer()
  48. {
  49. if (token_ != 0) 
  50. cancel();
  51. }
  52. void Timer::msched(int ms)
  53. {
  54. if (token_) Tcl_DeleteTimerHandler(token_);
  55. token_ = Tcl_CreateTimerHandler(ms, dispatch, (ClientData)this);
  56. }
  57. void Timer::dispatch(ClientData cd)
  58. {
  59. Timer* t = (Timer*)cd;
  60. t->token_ = 0;
  61. t->timeout();
  62. }
  63. void Timer::cancel()
  64. {
  65. if (token_ != 0) {
  66. Tcl_DeleteTimerHandler(token_);
  67. token_ = 0;
  68. }
  69. }
  70. double Timer::gettimeofday() const
  71. {
  72. timeval tv;
  73. ::gettimeofday(&tv, 0);
  74. return (1e6 * double(tv.tv_sec) + double(tv.tv_usec));
  75. }