comMisc.cpp
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:2k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* comMisc.cpp -- VxCOM miscellaneous support code */
  2. /* Copyright (c) 1999-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01e,17dec01,nel  Add include symbol for diab build.
  7. 01d,16jul01,dbs  add VxCondVar methods
  8. 01c,28jun01,dbs  move g_defaultServerPriority to comCoreLib
  9. 01b,27jun01,dbs  fix include filenames
  10. 01a,21jun01,dbs  written (adapted from the old vxdcom.cpp)
  11. */
  12. #include <stdio.h>
  13. #include "vxWorks.h"
  14. #include "semLib.h"
  15. #include "taskLib.h"
  16. #include "private/comMisc.h"
  17. /* Include symbol for diab */
  18. extern "C" int include_vxcom_comMisc (void)
  19.     {
  20.     return 0;
  21.     }
  22. VxMutex::VxMutex ()
  23.     {
  24.     m_mutex = semMCreate (SEM_Q_FIFO);
  25.     COM_ASSERT (m_mutex);
  26.     }
  27. VxMutex::~VxMutex ()
  28.     {
  29.     semDelete (m_mutex);
  30.     }
  31. void VxMutex::lock (unsigned long ms) const
  32.     {
  33.     STATUS result = semTake (m_mutex, MS2TICKS(ms));
  34.     COM_ASSERT(result == OK);
  35.     if (result != OK)
  36. taskSuspend (taskIdSelf ());
  37.     }
  38. void VxMutex::unlock () const
  39.     {
  40.     semGive (m_mutex);
  41.     }
  42. VxCondVar::VxCondVar ()
  43.     {
  44.     m_condvar = semBCreate (SEM_Q_FIFO, SEM_EMPTY);
  45.     COM_ASSERT (m_condvar);
  46.     }
  47. VxCondVar::~VxCondVar ()
  48.     {
  49.     semDelete (m_condvar);
  50.     }
  51. void VxCondVar::wait (const VxMutex& mtx)
  52.     {
  53.     mtx.unlock ();
  54.     semTake (m_condvar, WAIT_FOREVER);
  55.     mtx.lock (WAIT_FOREVER);
  56.     }
  57. void VxCondVar::signal () const
  58.     {
  59.     semGive (m_condvar);
  60.     }
  61. void comAssertFailed
  62.     (
  63.     const char* expr,
  64.     const char* fileName,
  65.     int         lineNo
  66.     )
  67.     {
  68.     printf ("VxCOM: Assertion failed: %s (%s:%d)n",
  69.             expr,
  70.             fileName,
  71.             lineNo);
  72.     taskSuspend (taskIdSelf ());
  73.     }