message_queue.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: message_queue.hpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/04/12 18:12:33  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.11
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_GBENCH___MESSAGE_QUEUE__HPP
  10. #define GUI_GBENCH___MESSAGE_QUEUE__HPP
  11. /*  $Id: message_queue.hpp,v 1000.4 2004/04/12 18:12:33 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Mati Shomrat
  37.  *
  38.  * File Description:
  39.  *    CMessageQueue - GBench message queue
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <util/thread_pool.hpp>
  43. #include <gui/plugin/PluginMessage.hpp>
  44. BEGIN_NCBI_SCOPE
  45. class CPluginTask;
  46. /*
  47.  * CPluginMessageQueue provides the public (static) interface for
  48.  * the GenomeWorkbench message queue.
  49.  */
  50. class NCBI_XGBPLUGIN_EXPORT CPluginMessageQueue
  51. {
  52. public:
  53.     //~CPluginMessageQueue();
  54.     // Process a single message off of the queue.
  55.     // Blocks for no longer that the specified timeout.
  56.     static void ProcessMessage(size_t timeout_sec  = kMax_UInt,
  57.                                size_t timeout_nsec = kMax_UInt) THROWS_NONE;
  58.     // process an indicated message.  This will perform the tasks immediately,
  59.     // and do all history logging
  60.     static void ProcessMessage(objects::CPluginMessage& msg);
  61.     // Add a message to the queue.
  62.     // returns 'true' if successfully added, 'false' otherwise.
  63.     static bool Add(objects::CPluginMessage& msg) THROWS_NONE;
  64.     // Get a message. 
  65.     // Blocks for no longer that the specified timeout.
  66.     // Will return an empty CConstRef if no message was retrieved.
  67.     static objects::CPluginMessage*
  68.     Get(size_t timeout_sec  = kMax_UInt,
  69.         size_t timeout_nsec = kMax_UInt) THROWS_NONE;
  70.     
  71.     // The number of messages currently in the queue.
  72.     static SIZE_TYPE Size(void) THROWS_NONE;
  73.     // Storage allocated for the queue
  74.     static SIZE_TYPE Capacity(void) THROWS_NONE;
  75.     // query whether the queue is full or empty
  76.     static bool IsFull(void) THROWS_NONE;
  77.     static bool IsEmpty(void) THROWS_NONE;
  78.     // clear the message queue
  79.     static void Clear(void) THROWS_NONE;
  80. private:
  81.     // types
  82.     typedef CRef<objects::CPluginMessage> TMessage;
  83.     typedef CBlockingQueue<TMessage>      TMessageQueue;
  84.     typedef list<CRef<CPluginTask> >      TTasks;
  85.     // the one and only message queue
  86.     static TMessageQueue sm_Queue;
  87.     // a parallel task queue to hold messages in progress
  88.     static TTasks sm_TaskList;
  89.     // drop a message
  90.     static void x_DropMessage(const objects::CPluginMessage& msg);
  91. };
  92. END_NCBI_SCOPE
  93. #endif  // GUI_GBENCH___MESSAGE_QUEUE__HPP
  94. /*
  95.  * ===========================================================================
  96.  * $Log: message_queue.hpp,v $
  97.  * Revision 1000.4  2004/04/12 18:12:33  gouriano
  98.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.11
  99.  *
  100.  * Revision 1.11  2004/04/07 12:33:58  dicuccio
  101.  * Dropped x_ProcessReply() - not used anymore
  102.  *
  103.  * Revision 1.10  2003/12/31 20:31:24  dicuccio
  104.  * Deleted dead code
  105.  *
  106.  * Revision 1.9  2003/12/22 19:12:40  dicuccio
  107.  * Removed internal singleton - cleans up the calling API significantly
  108.  *
  109.  * Revision 1.8  2003/11/18 17:35:53  dicuccio
  110.  * Removed unnecessary static const member variable.  Added API to separate reply
  111.  * processing from message handling
  112.  *
  113.  * Revision 1.7  2003/11/14 17:43:05  dicuccio
  114.  * Added Clear()
  115.  *
  116.  * Revision 1.6  2003/11/04 17:11:15  dicuccio
  117.  * Merged dispatcher/message queue.  Added function to force processing of a
  118.  * single message out of the queue
  119.  *
  120.  * Revision 1.5  2003/08/22 15:54:48  dicuccio
  121.  * General clean-up:  Removed unneeded export specifiers from templates; removed
  122.  * 'USING_SCOPE(objects)'
  123.  *
  124.  * Revision 1.4  2003/08/05 16:58:39  dicuccio
  125.  * Changed calling conventions for plugin message queue - pass by reference, not
  126.  * CConstRef<>
  127.  *
  128.  * Revision 1.3  2003/07/31 16:41:49  dicuccio
  129.  * Changed class name to be application-agnostic.  Moved instance creation into
  130.  * .cpp file.  Changed mutex to use correct static initialization
  131.  *
  132.  * Revision 1.2  2003/07/15 15:10:28  ucko
  133.  * Make the guard for sm_Instance a static class member, since Darwin's
  134.  * shared-library linker doesn't like inline functions with static locals.
  135.  *
  136.  * Revision 1.1  2003/07/14 10:52:14  shomrat
  137.  * Initial Revision
  138.  * 
  139.  * ===========================================================================
  140.  */