00001 /*00002 * The Software License00003 * =================================================================================00004 * Copyright (c) 2003-.The Terimber Corporation. All rights reserved.00005 * =================================================================================00006 * Redistributions of source code must retain the above copyright notice, 00007 * this list of conditions and the following disclaimer.00008 * Redistributions in binary form must reproduce the above copyright notice, 00009 * this list of conditions and the following disclaimer in the documentation 00010 * and/or other materials provided with the distribution.00011 * The end-user documentation included with the redistribution, if any, 00012 * must include the following acknowledgment:00013 * "This product includes software developed by the Terimber Corporation."00014 * =================================================================================00015 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, 00016 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 00017 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00018 * IN NO EVENT SHALL THE TERIMBER CORPORATION OR ITS CONTRIBUTORS BE LIABLE FOR 00019 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00020 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00021 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 00022 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT00023 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE00024 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.00025 * ================================================================================00026 */00027
00028 #include "aiomsg/msg_comm.h"00029 #include "base/list.hpp"00030 #include "base/memory.hpp"00031 #include "base/common.hpp"00032
00033 BEGIN_TERIMBER_NAMESPACE00034 #pragma pack(4)00035
00036msg_queue_processor::msg_queue_processor(msg_communicator* communicator) : msg_base(communicator)
00037 {
00038 }
00039
00040msg_queue_processor::~msg_queue_processor()
00041 {
00042 }
00043
00045 //virtual 00046 void00047msg_queue_processor::v_on()
00048 {
00049 msg_base::v_on();
00050 wakeup();
00051 }
00053 //virtual 00054 void00055msg_queue_processor::v_off()
00056 {
00057 _communicator->get_thread_manager().revoke_client(this);
00058 msg_base::v_off();
00059 }
00060
00061
00062 bool00063msg_queue_processor::v_has_job(size_t ident, void* user_data)
00064 {
00065 return !is_block() // queue is not blocked00066 && peek(); // there are messages in the queue00067 }
00068
00069 #pragma pack()00070 END_TERIMBER_NAMESPACE