8个定时器,8个线程,是在线程中settimer,还是在ONTIMER中开始线程?????

时间:2021-03-13 19:13:40
我第一次玩这种名堂,希望各位告诉我如何开发多线程的程序,不用多线程行吗,8个定时器会不会死机,最短的时间间隔10MS,最长的5000,望高手指点

17 个解决方案

#1


用 timer 可以让线程变得没有用出,不过你用线程好灵活的多。
你一般都是 八个八个的用??太吓人了。

#2


两种可能都有!关键是任务的执行时间!你为什么不全部采用一个方式哪?都用sttimer或 thread.

#3


我感觉你的要求应该先打开8个线程,每个线程设自己的定时器进行处理。8个定时器不会死机

#4


10Ms计时器不准确的。
用工作线程

#5


同意,10ms更本不可能精确计时

#6


用线程吧,10ms定时用SetTimer()是不行了,或许只能用多媒体定时器了,那个精确一些。

#7


SetTimer() 这个定时的最小时间是18.6ms(100/6 ms) 左右
要求更高的精度那要用的定时器挺复杂的,我都不懂得怎么弄了

#8


我靠,怎么和我现在的程序是一模一样的,我是用定时器启动线程的。

#9


10ms可能倒不了这个精度

你不如用内核方式的等待时钟
createwaitabletimer()

#10


线程效率高,建议用线程

#11


谢谢

#12


有没有实例代码给我一个

#13


其实很多东西在一个线程就可以了,没有必要开那么多线程

#14


谢谢各位,看来关注者甚少

#15


别用定时器, 我用定时器显示时间,900毫秒刷一次, 碰到系统忙的时候, OnTimer的显示时间模块函数定时器没有得到执行

用线程可以自己定义这个线程的优先级,挺不错的

#16


注意系统资源.

#17


多媒体Sleep()呵呵,大家用这个吧。

BOOL MySleep(DWORD dwInterval)
{
BOOL bNormal = TRUE; 
LARGE_INTEGER frequence, privious, current, interval; 
 
if(!QueryPerformanceFrequency( &frequence)) 

::MessageBox(NULL, "Your computer hardware doesn't support the high- resolution performance counter", 
"Not Support", MB_ICONEXCLAMATION | MB_OK); //或其它的提示信息 
return FALSE; 

 
interval.QuadPart = frequence.QuadPart * dwInterval / 1000000; 
 
bNormal = bNormal && QueryPerformanceCounter( &privious ); 
current = privious; 
 
while( current.QuadPart - privious.QuadPart < interval.QuadPart ) 
bNormal = bNormal && QueryPerformanceCounter( &interval ); 
 
return bNormal; 

}

//使用方法
OnTimer(...)
{
    yourproc()
    mysleep(200);

}

#1


用 timer 可以让线程变得没有用出,不过你用线程好灵活的多。
你一般都是 八个八个的用??太吓人了。

#2


两种可能都有!关键是任务的执行时间!你为什么不全部采用一个方式哪?都用sttimer或 thread.

#3


我感觉你的要求应该先打开8个线程,每个线程设自己的定时器进行处理。8个定时器不会死机

#4


10Ms计时器不准确的。
用工作线程

#5


同意,10ms更本不可能精确计时

#6


用线程吧,10ms定时用SetTimer()是不行了,或许只能用多媒体定时器了,那个精确一些。

#7


SetTimer() 这个定时的最小时间是18.6ms(100/6 ms) 左右
要求更高的精度那要用的定时器挺复杂的,我都不懂得怎么弄了

#8


我靠,怎么和我现在的程序是一模一样的,我是用定时器启动线程的。

#9


10ms可能倒不了这个精度

你不如用内核方式的等待时钟
createwaitabletimer()

#10


线程效率高,建议用线程

#11


谢谢

#12


有没有实例代码给我一个

#13


其实很多东西在一个线程就可以了,没有必要开那么多线程

#14


谢谢各位,看来关注者甚少

#15


别用定时器, 我用定时器显示时间,900毫秒刷一次, 碰到系统忙的时候, OnTimer的显示时间模块函数定时器没有得到执行

用线程可以自己定义这个线程的优先级,挺不错的

#16


注意系统资源.

#17


多媒体Sleep()呵呵,大家用这个吧。

BOOL MySleep(DWORD dwInterval)
{
BOOL bNormal = TRUE; 
LARGE_INTEGER frequence, privious, current, interval; 
 
if(!QueryPerformanceFrequency( &frequence)) 

::MessageBox(NULL, "Your computer hardware doesn't support the high- resolution performance counter", 
"Not Support", MB_ICONEXCLAMATION | MB_OK); //或其它的提示信息 
return FALSE; 

 
interval.QuadPart = frequence.QuadPart * dwInterval / 1000000; 
 
bNormal = bNormal && QueryPerformanceCounter( &privious ); 
current = privious; 
 
while( current.QuadPart - privious.QuadPart < interval.QuadPart ) 
bNormal = bNormal && QueryPerformanceCounter( &interval ); 
 
return bNormal; 

}

//使用方法
OnTimer(...)
{
    yourproc()
    mysleep(200);

}