VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 855|回复: 7

定时执行某个任务

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-1 23:30:01 | 显示全部楼层 |阅读模式
现在在一个普通类下开了一个线程,如下:
void CTest::testFunc()
{
    while(flag==TRUE)
    {
           if(缓冲区中有图像)
                将图像显示出来;

           Sleep(100);
    }   

}

问题:
1.这样子的话,就实现了没隔100ms显示一副图像(当然这时候缓冲区中必须已经有图像才行),不知这样是否可以达到一个定时显示的功能?这样和用定时器有什么区别吗?会不会收到其他线程的干扰呢?

2.如果在某次准备显示的时候,缓冲区中还没有图像,这时候肯定是不会显示的,必须再过100ms,才过来检查显示。但是很可能就在判断条件后的10ms,缓冲区就有图像了,这样的话图像的显示就不实时了,不知这样有没有什么解决方法?


谢谢各位了!!!
回复

使用道具 举报

1

主题

7

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-5-14 16:00:01 | 显示全部楼层
1.flag是什么标志位?
2.testFunc()是被不停的执行吗?否则一但flag=false退出后怎么办?所以这段不能实现定时显示,它的显示受flag等的约束,只有他们满足时,才能考虑100ms,而定时器没有上述问题.
3.最好是通过缓冲区的标志位来控制开始画图
个人意见,仅供参考:)
回复

使用道具 举报

0

主题

55

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-5-15 01:45:01 | 显示全部楼层
应该通过事件来驱动显示图像。
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-16 06:45:02 | 显示全部楼层
while(flag==TRUE)
    {
           if(缓冲区中有图像)
             {
                将图像显示出来;
                Sleep(100);
              }
    }  
可以解决第二个问题
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-5-16 10:30:01 | 显示全部楼层
sleep 与 Timer的区别在于,Sleep是咀塞的,而Timer不会。

你可以用定时器每隔一秒检查一次,如果有数据立即进行绘制。
回复

使用道具 举报

0

主题

13

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-5-17 14:15:01 | 显示全部楼层
用消息更好吧,有没有图象你肯定知道,然后发消息去OnDraw
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-30 12:45:01 | 显示全部楼层
那就sleep(1)吧
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-6-15 14:45:01 | 显示全部楼层
应该象rsq666说的那样

用事件Event来实现

CreateEvent(...)创建一个事件对象, 当图像到达后用SetEvent(...)来唤醒你这个线程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表