Hello Sid, GetTickCount() is inaccurate in milliseconds interval. You better use timeGetTime() one (you will need to link a mm library). In any case I suppose that Ross holds the working thread on an event or something and thus efficiently release any time slices. Do a simple test - run idle server and check how much CPU it uses. Nikolai.
________________________________ From: live-devel-boun...@ns.live555.com [mailto:live-devel-boun...@ns.live555.com] On Behalf Of Sid Price Sent: Thursday, August 16, 2012 11:16 PM To: 'LIVE555 Streaming Media - development & use' Subject: Re: [Live-devel] Do the test applications ever sleep? Thanks Ross. I used the word "sleeping" to mean that the process gives up any remaining time from its current time-slice for the OS to allocate as required. Using your information I did some more digging and if I measure the execution time of "SingleStep" when the OnDemandRTSPServer application is running with no client connections I see <1mS execution time. I think my test code is good: void BasicTaskScheduler0::doEventLoop(char* watchVariable) { // Repeatedly loop, handling readble sockets and timed events: while (1) { if (watchVariable != NULL && *watchVariable != 0) break; DWORD dwTick_1, dwTick_2 ; DWORD dwTickDelta ; dwTick_1 = GetTickCount(); SingleStep(); dwTick_2 = GetTickCount() ; dwTickDelta = dwTick_2 - dwTick_1 ; dwTick_1 = 0 ; // Place to breakpoint } } GetTickCount is a Windows API that retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days, then it wraps. Syntax. "dwTickDelta" is always zero, meaning <1mS. What led me here was that I used a process monitor to measure the CPU % that the test application was consuming and when I have no client attached and therefore no streaming happening I see higher CPU usage than I expected. In the range 15-25% of CPU. The CPU is a fast ARM that should be more than enough horsepower for this task. Sid. Since there is nothing else in the "doEventLoop" I terms of calls I have to assume the 10mS you mentioned should be the execution time of the "SingleStep" method. From: live-devel-boun...@ns.live555.com [mailto:live-devel-boun...@ns.live555.com] On Behalf Of Ross Finlayson Sent: Thursday, August 16, 2012 2:28 PM To: LIVE555 Streaming Media - development & use Subject: Re: [Live-devel] Do the test applications ever sleep? While investigating another issue I began to dig a little deeper into how the library operates and it appears to me that the process running the servers never sleeps, is this correct? Not really. I don't know what specifically you mean by 'sleep', but - as you know - LIVE555-based applications are event driven, and execute code only when handling an event. When there are no events to be handled, then the application does not run. You can call this 'sleeping' if you like. What you might be referring to, however, is the fact that - in the "BasicTaskScheduler" implementation - there is a periodic delayed task called "schedulerTickTask()" that runs every 10 milliseconds (not 10 microseconds as the comment in the code incorrectly says). This task does no work, and exists only to ensure that the code periodically returns from "select()", to handle any triggered events. But this causes only a brief period of activity (with almost no overhead) every 10 ms; for the rest of the time, the application is effectively 'sleeping' if there are no other events to be handled. Ross Finlayson Live Networks, Inc. http://www.live555.com/
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel