@@实时线程问题请教@@@
你的帖子还没有人回复吗?先到娱乐板块放松一下吧@@@实时线程问题请教@@@Linux伊甸园论坛}n%l dtv
c_
^'\KtuY"t,K
)[|\\Y.N*CHGq打算在一个线程中进行计时,故此开了一个线程如下+~%o6FC#w'g0ftOH+rD
void *thread_child (void *data)1a0Fb:U&FW&}'c
{Linux伊甸园论坛,dv)IM^,w-w
int count = 1;
-HwcW5zR4o~ struct timeval tStart, tEnd;
h4Y^
NC#z!dr long timeuse;
-cw(G |0`0g"}|1zLinux伊甸园论坛 while(1)
:W,R gop/I {
5vEC1O`Linux伊甸园论坛 count++;
?&hLU
I!j7t-?I"f%v6TLinux伊甸园论坛 gettimeofday(&tStart,NULL);//取得开始的时间
eaS9C#z*@,n#J?"w usleep(1000);
8lPV:g){3s(t:^MLinux伊甸园论坛 gettimeofday(&tEnd,NULL);6@#BB{d7GU
timeuse = 1000000*(tEnd.tv_sec - tStart.tv_sec) + (tEnd.tv_usec - tStart.tv_usec);
jt8i.jm2V|8`3L printf("time:%d\n",timeuse);Linux伊甸园论坛UTae6a|dx
}
/s6W7RR&HJ}Linux伊甸园论坛vEnGG@3M
1、如果该线程定义为普通线程,则如果程序中存在两个线程运行,usleep的时间<10000us,则打印出的time为20ms左右,vPF2`cq
2、如果该线程定义为SCHED_RR线程,另外一个线程定义为普通线程,则如果程序中的usleep部分的睡眠时间<2000us打印出的time跟usleep中的数值范围接近,但是只要超过2000us,即使是2010us,打印出的时间也是20ms左右,N;`"B2Dn_:xi
对于1我认为,只要调用sleep主动阻塞线程,则下次调用的时间应该是系统的一个时间片之后,(我得linux版本为2。4板,一个时间片为10ms,而线程为20ms?x线程时间为猜测),所以只要usleep中的数值不炒过一个时间片,程序打印的时间也就是一个时间片,不知我得理解对不?:Dq|0R{'~
h]
对于2的前半部分我的理解该线程睡眠完毕后因为优先级高,所以立刻抢占其他线程的时间,所以打印的时间跟睡眠的时间相接近,但是为什么大于2000后,打印的时间变成了20ms就理解不了了,希望哪位大侠能指点一下,我觉得实时线程应该随时可以抢占别的普通线程的时间运行,所以应该所有的情况,打印的时间都跟睡眠的时间一致才对,但是试验结果不对,请大家指点啊.
|