最近在做音视频采集,出现这样的问题. 音频采集需要20ms调用一次,视频采集保证33ms调用一次;程序启动了两个线程,每个线程私有一个锁,两个线程启动后,出现这样的情况视频线程在处理的时候,音频线程进来处理,而且一下子处理2-3次,导致视频线程处理时间被拖得很长都达到了100ms,小弟认为认为音频线程处理完了一次,我调用sleep,把音频线程可能剩余的时间片时间,释放了,这个时候视频线程的优先级应该提高,优先获得执行才对,可为什么依旧是音频线程继续执行,(我知道 "线程调度具有不可预知的" 废话! 希望高手深入的解释下,最好能够提出如何优化执行
下面是程序部分源码
[code=C/C++]
typedef struct _ThreadInfo{
HANDLE mutex;
HANDLE thread;
}ThreadInfo;
void* thread_proc(void* param){
ThreadInfo *ti = (ThreadInfo*)param;
WaitForSingleObject(ti->mutex,0);
while(ti->run){
for(i=0;i<ti->var;i++)
{
function_var(ti,i);
}
while(1){
unsigned long diff;
ReleaseMutex(ti->mutex);
realtime = ti->get_cur_time() - orig;
time += 1;
diff = realtime - time;
if(diff < 0)
{
log_debug("%s we are in advanced %d ms,sleep",ti->name,diff);
Sleep(diff);
}else{
log_debug("%s we are late of %d ms",ti->name,diff);
Sleep(0);
break;
}
WaitForSingleObject(ti->mutex,0);
}
WaitForSingleObject(ti->mutex,0);
}
ReleaseMutex(ti->mutex);
CloseHandle(ti->thread);
log_debug("%s thread exiting",ti->name);
return NULL;
} |