找回密码
 注册
Simdroid-非首页
查看: 725|回复: 5

【原创】用timer实现多线程

[复制链接]
发表于 2005-12-17 11:43:49 | 显示全部楼层 |阅读模式 来自 陕西西安
用timer函数实现了多线程的效果,两个函数可以并行地运行了,
程序中主线程设了约11s,timer线程设了10s,主线程多运行一会儿。
主线程中需要不时调用pause,否则Timer线程抢不到啊!!
下面是输出结果:
Timer线程(TimerFcn):17-Dec-2005 11:39:43
主线程:            17-Dec-2005 11:39:43
主线程:            17-Dec-2005 11:39:44
Timer线程(TimerFcn):17-Dec-2005 11:39:44
主线程:            17-Dec-2005 11:39:44
Timer线程(TimerFcn):17-Dec-2005 11:39:45
主线程:            17-Dec-2005 11:39:45
主线程:            17-Dec-2005 11:39:45
主线程:            17-Dec-2005 11:39:46
Timer线程(TimerFcn):17-Dec-2005 11:39:46
主线程:            17-Dec-2005 11:39:46
主线程:            17-Dec-2005 11:39:47
Timer线程(TimerFcn):17-Dec-2005 11:39:47
主线程:            17-Dec-2005 11:39:47
主线程:            17-Dec-2005 11:39:48
Timer线程(TimerFcn):17-Dec-2005 11:39:48
主线程:            17-Dec-2005 11:39:48
Timer线程(TimerFcn):17-Dec-2005 11:39:49
主线程:            17-Dec-2005 11:39:49
主线程:            17-Dec-2005 11:39:49
Timer线程(TimerFcn):17-Dec-2005 11:39:50
主线程:            17-Dec-2005 11:39:50
主线程:            17-Dec-2005 11:39:50
Timer线程(TimerFcn):17-Dec-2005 11:39:51
主线程:            17-Dec-2005 11:39:51
主线程:            17-Dec-2005 11:39:51
Timer线程(TimerFcn):17-Dec-2005 11:39:52
Stopped!
主线程:            17-Dec-2005 11:39:52
主线程:            17-Dec-2005 11:39:52
主线程:            17-Dec-2005 11:39:53
主线程:            17-Dec-2005 11:39:53
主线程:            17-Dec-2005 11:39:54
总共运行时间:11.063

代码:
function timertest
%例:timer实现多线程
%作者:nostalgica
%我的Blog: nostalgica.blogcn.com
t = timer('TimerFcn',{@mycallback,'Hello Matlab!'}, 'Period', 1,'stopfcn',{@stopcallback,'Stopped!'},'TaskstoExecut',10,'execution','fixedRate');
start(t);
timestart=clock;
while(1)   
    if etime(clock,timestart)>=11%主线程约11s,timer设了10s,主线程多运行一会儿。
        break;
    end
    pause(.5);%要是不pause,Timer线程抢不到啊!!
    disp(['主线程:            ' datestr(clock)]);
end
stop(t);
disp(['总共运行时间:' num2str(etime(clock,timestart))]);
   
function mycallback(obj, event,string_arg)
txt1 = 'Timer线程';
txt2 = string_arg;

event_type = event.Type;
event_time = datestr(event.Data.time);

msg = [ txt1 '(' event_type '):' event_time];
disp(msg);

function stopcallback(obj, event,string_arg)
txt2 = string_arg;
disp(txt2);

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2005-12-19 19:41:36 | 显示全部楼层 来自 新加坡

Re:【原创】用timer实现多线程

Simdroid开发平台
友情支持一下,从上面的运行结果可以看出,结果有点乱,应该是线程之间竞赛的结果,加上相应的线程之间的同步可能就好了.

matlab本身是单线程,不知像这个例子的技术,是否应该称作“多线程”. :I
发表于 2008-1-14 21:56:25 | 显示全部楼层 来自 安徽合肥
我是外行啊,想问一下matlab里串口对象里的同步与异步,跟楼主说的多线程有什么区别?
回复 不支持

使用道具 举报

发表于 2008-4-28 09:28:29 | 显示全部楼层 来自 广东江门

有没有别的方法实现多线程阿

这样实现是不是太低效了,把低层的功能放到高层来实现?matlab2007a好像提供了多线程,但我看到的文献都是讲利用它的分布式计算功能实现多CPU运行一个程序,有没有利用它自带的函数在一个CPU上实现两个以上线程的方法阿?类似于C++那样的?
回复 不支持

使用道具 举报

发表于 2009-5-18 00:25:45 | 显示全部楼层 来自 北京
好像Matlab里面就只能用timer实现多线程了,不知道还有没有其他的方法。。
回复 不支持

使用道具 举报

发表于 2010-2-24 08:32:14 | 显示全部楼层 来自 河南焦作
最近我也在学习多线程,谢谢。
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 19:30 , Processed in 0.041379 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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