Doesn't oprofile measure the sleep in a function?

I've tested an example below.


void sig_cat( void) {
printf( "Signal Captured\n");

void a( int i) {
printf( "a\n");

void b( int i) {
struct timeval tv;

tv.tv_sec = 0;
tv.tv_usec = 1000000;
select(0, 0, 0, 0, &tv);

void c( int i) {
int n;
static s=1;

for( n=1; n<=i; n++) {
s=s*i; }

int main( void) {
int i=900000;

signal( 2, (void *)sig_cat);
while( 1) {


The oprofile result is

# opreport -l prof_test
CPU: P4 / Xeon, speed 1513.7 MHz (estimated)
Counted GLOBAL_POWER_EVENTS events (time during which processor is not
stopped) with a unit mask of 0x01 (mandatory) count 100000
samples % symbol name
4851 99.9794 c
1 0.0206 main

Actually the process waits more time in function a and b than c, but
the oprofile reports c function is mainly processes.
I just want to know which function takes time, not takes cpu.

Is there any idea?