14 个解决方案
#1
sleep掉?
#2
Wince里有GetThreadTimes 函数吗?
#3
sleep(0);
#4
1.为什么要20ms耗尽?是为了解决什么问题?
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(0);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(0);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
#5
sleep会放弃时间片的。
#6
1.为什么要20ms耗尽?是为了解决什么问题?
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(1);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(1);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
#7
线程开始用 GetTickCount 函数得到个程序运行时间
线程结束 GetTickCount 得到个时间
2个时间相减
如果不够20ms sleep
但不知道这么做的精度够不够
线程结束 GetTickCount 得到个时间
2个时间相减
如果不够20ms sleep
但不知道这么做的精度够不够
#8
sleep 总归是不能用,得循环干垃圾活浪费掉时间片!
并且,内部计时得方式只是保证执行期长度,和线程得时间片本身不能等同处理。循环一次可能大于一个时间片。
并且,内部计时得方式只是保证执行期长度,和线程得时间片本身不能等同处理。循环一次可能大于一个时间片。
#9
耗尽20ms是为了将时间均匀打散,这样数据显示不会闪烁,sleep会放弃时间片的啊
#10
在循环开始与结尾使用gettickcount计算时间,不够就循环,结束条件为时间到,这样应该可以,该内核太复杂了吧
#11
线程能不能使用完 整个时间片,不是你能决定的吧,是有内核调度决定的。而且这样做的目的是什么?
#12
放弃时间片怎么就导致数据显示闪烁了?多任务系统,没事情就应该放弃时间片,提高系统效率。
如果是为了数据显示不会闪烁。那应该显示那里去做处理,比如说使用内存DC双缓冲,合理使用裁减区等!
另外,如果要求你的程序每次循环之间都必须 >= 某时间的话,那gettickcount是可以考虑的。
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time<=20ms)
{
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
}
// do your things
}
如果是为了数据显示不会闪烁。那应该显示那里去做处理,比如说使用内存DC双缓冲,合理使用裁减区等!
另外,如果要求你的程序每次循环之间都必须 >= 某时间的话,那gettickcount是可以考虑的。
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time<=20ms)
{
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
}
// do your things
}
#13
上面的错了:
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time <=20ms)
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
// do your things
}
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time <=20ms)
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
// do your things
}
#14
不需要Sleep,想把分线程的时间夺过来,提高主线程的优先级,这样分线程执行一段时间让主线程启动,把时间夺过来,不过要保护好数据,别没等显示,就被更新了。
#1
sleep掉?
#2
Wince里有GetThreadTimes 函数吗?
#3
sleep(0);
#4
1.为什么要20ms耗尽?是为了解决什么问题?
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(0);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(0);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
#5
sleep会放弃时间片的。
#6
1.为什么要20ms耗尽?是为了解决什么问题?
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(1);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
2.主线程循环
{
//
do{ 检测到某信号量退出, 干无聊事情浪费时间 }while(1);
}
内核代码里面改改,线程切换的时候,把某信号量置位。
#7
线程开始用 GetTickCount 函数得到个程序运行时间
线程结束 GetTickCount 得到个时间
2个时间相减
如果不够20ms sleep
但不知道这么做的精度够不够
线程结束 GetTickCount 得到个时间
2个时间相减
如果不够20ms sleep
但不知道这么做的精度够不够
#8
sleep 总归是不能用,得循环干垃圾活浪费掉时间片!
并且,内部计时得方式只是保证执行期长度,和线程得时间片本身不能等同处理。循环一次可能大于一个时间片。
并且,内部计时得方式只是保证执行期长度,和线程得时间片本身不能等同处理。循环一次可能大于一个时间片。
#9
耗尽20ms是为了将时间均匀打散,这样数据显示不会闪烁,sleep会放弃时间片的啊
#10
在循环开始与结尾使用gettickcount计算时间,不够就循环,结束条件为时间到,这样应该可以,该内核太复杂了吧
#11
线程能不能使用完 整个时间片,不是你能决定的吧,是有内核调度决定的。而且这样做的目的是什么?
#12
放弃时间片怎么就导致数据显示闪烁了?多任务系统,没事情就应该放弃时间片,提高系统效率。
如果是为了数据显示不会闪烁。那应该显示那里去做处理,比如说使用内存DC双缓冲,合理使用裁减区等!
另外,如果要求你的程序每次循环之间都必须 >= 某时间的话,那gettickcount是可以考虑的。
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time<=20ms)
{
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
}
// do your things
}
如果是为了数据显示不会闪烁。那应该显示那里去做处理,比如说使用内存DC双缓冲,合理使用裁减区等!
另外,如果要求你的程序每次循环之间都必须 >= 某时间的话,那gettickcount是可以考虑的。
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time<=20ms)
{
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
}
// do your things
}
#13
上面的错了:
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time <=20ms)
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
// do your things
}
exe_time = GetTickCount();
主线程循环
{
while(GetTickCount() - exe_time <=20ms)
sleep(0); // 这里就是立即放弃当前时间片,让其他任务处理。
exe_time = GetTickCount();
// do your things
}
#14
不需要Sleep,想把分线程的时间夺过来,提高主线程的优先级,这样分线程执行一段时间让主线程启动,把时间夺过来,不过要保护好数据,别没等显示,就被更新了。