mq.h
上传用户:hnnddl
上传日期:2007-01-06
资源大小:3580k
文件大小:3k
源码类别:

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.4 $
  3.  * $Date: 1998/05/19 18:16:23 $
  4.  */
  5. ////////////////////////////////////////////////////////////////
  6. //               Copyright (c) 1996,97 Lucent Technologies    //
  7. //                       All Rights Reserved                  //
  8. //                                                            //
  9. //                       THIS IS UNPUBLISHED                  //
  10. //                       PROPRIETARY SOURCE                   //
  11. //                   CODE OF Lucent Technologies              //
  12. // AND elemedia   //
  13. //                                                            //
  14. ////////////////////////////////////////////////////////////////
  15. //
  16. ////////////////////////////////////////////////////////////////
  17. // Example programs are provided soley to demonstrate one     //
  18. // possible use of the stack libraries and are included for   //
  19. // instructional purposes only.  You are free to use, modify  //
  20. // and/or redistribute any portion of code in the example     //
  21. // programs.  However, such examples are not intended to      //
  22. // represent production quality code.                         //
  23. //                                                            //
  24. // THE COPYRIGHT HOLDERS PROVIDE THESE EXAMPLE PROGRAMS       //
  25. // "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED     //
  26. // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED     //
  27. // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A            //
  28. // PARTICULAR PURPOSE.                                        //
  29. ////////////////////////////////////////////////////////////////
  30. #if !defined(__MQ_H__)
  31. #define __MQ_H__
  32. #if (defined(WIN32))
  33. #include <windows.h>
  34. #elif defined(VXWORKS)
  35. #include "vxWorks.h"
  36. #include "taskLib.h"
  37. #include "semLib.h"
  38. #include "selectLib.h"
  39. #include "fcntl.h"
  40. #include "sockLib.h"
  41. #include "inetLib.h"
  42. #include "msgQLib.h"
  43. #else
  44. #if (defined(__hpux))
  45. #include <pthread.h>
  46. #else
  47. #include <thread.h>
  48. #include <synch.h>
  49. #endif
  50. #endif
  51. #if (defined(WIN32))
  52. #include <windows.h>
  53. #endif
  54. struct USER_MESSAGE
  55. {
  56. int message;
  57. int wParam;
  58. int lParam;
  59. };
  60. class MessageQueue
  61. {
  62. public:
  63. MessageQueue(char *name, int mqlen, unsigned long param);
  64. virtual ~MessageQueue();
  65. void QueueMessage(USER_MESSAGE *msg);
  66. int DequeueMessage(USER_MESSAGE *msg);
  67. // Start listener thread.
  68. int Start();
  69. // Stop listener thread.
  70. void Stop();
  71. virtual void NotifyMessage(USER_MESSAGE&) = 0;
  72. protected:
  73. void wait_for_message();
  74. struct mqueue_node
  75. {
  76. USER_MESSAGE msg;
  77. mqueue_node *next;
  78. } *mqueue_head, *mqueue_tail;
  79. int q_len;
  80. char q_name[80];
  81. #if defined(WIN32)
  82. unsigned long  thread_id;
  83. HANDLE  thread_handle;
  84. static unsigned __stdcall _boot(void *context);
  85. #elif defined(VXWORKS)
  86. MSG_Q_ID mqueue_id;
  87. int thread_id;
  88. SEM_ID thread_exited_flag;
  89. static int _boot(void *context);
  90. #elif (defined(__hpux))
  91. pthread_mutex_t mutex;
  92. pthread_cond_t mqueue_not_empty;
  93. pthread_t thread_id;
  94. static void *_boot(void *context);
  95. #else
  96. mutex_t mutex;
  97. cond_t mqueue_not_empty;
  98. thread_t  thread_id;
  99. static void *_boot(void *context);
  100. #endif
  101. };
  102. #if (defined(WIN32))
  103. #define USER_MESSAGE_ID (WM_USER + 1001)
  104. #else
  105. #define WM_USER 100
  106. #endif
  107. #define MQ_INTERNAL_ID WM_USER + 100
  108. #endif