
The code can trap in sched_yield (),(see below) why it still consume high CPU resource? (gdb) bt #0 0xffffe410 in __kernel_vsyscall () #1 0x401b706c in sched_yield () from /lib/tls/libc.so.6 #2 0x0804e88f in thread_yield () at ../boost138inst/include/boost-1_38/boost/interprocess/detail/os_thread_functions.hpp:1 04 #3 0x0804c22b in boost::interprocess::interprocess_condition::do_timed_wait ( this=0x40018018, tout_enabled=false, abs_time=@0xbff77a70, mut=@0x40018014) at ../boost138inst/include/boost-1_38/boost/interprocess/sync/emulation/interprocess_cond ition.hpp:125 #4 0x0804bfc2 in boost::interprocess::interprocess_condition::do_wait (this=0x40018018, mut=@0x40018014) at ../boost138inst/include/boost-1_38/boost/interprocess/sync/emulation/interprocess_cond ition.hpp:70 -----Original Message----- From: ZHOU,JON (A-China,ex2) Sent: Tuesday, September 08, 2009 10:21 AM To: boost@lists.boost.org; ZHOU,JON (A-China,ex2) Subject: [interprocess]why message_queue receive() will consume so much CPU resource Hi there I just found that message_queue::receive() or message_queue:: timed_receive () consume high CPU resource, (99% CPU) the code like the below: //create message_queue date d(2009,Sep,8); //an arbitrary date //construct a time by adding up some durations durations ptime t1(d, hours(0)+minutes(0)+seconds(1)+millisec(0)); while (1) { for(int i = 0; i < 100; ++i){ int number; //mq.receive(&number, sizeof(number), recvd_size, priority); mq.timed_receive(&number, sizeof(number), recvd_size, priority,t1); } } As I know, both the receive() & timed_receive() are block method, there should be sleep mechanism inside. why it still need so much CPU resource? Thanks jon