社区
C#
帖子详情
方法是顺序执行的吗?
sherwinzhubuaa
2007-06-13 10:02:29
假设有一个类A,它有2个方法M1,M2。M1因为定时器会周期性的执行,M2由用户操作引发执行。
问题是,程序执行的时候,一定会保证M1,M2的执行顺序吗?M1 M2或M2 M1,就像事务调度一样。
会不会在M2执行的过程中,M1开始执行呢?
如果Dotnet自身并不这样保证,那么怎么才能够实现这种需求呢?
如果是多线程,可以使用通过对象锁定进行线程同步,现在遇到的情况是M1,M2 均在一个线程中执行?
不知道谁有这方面的经验,谢谢指教!
...全文
225
15
打赏
收藏
方法是顺序执行的吗?
假设有一个类A,它有2个方法M1,M2。M1因为定时器会周期性的执行,M2由用户操作引发执行。 问题是,程序执行的时候,一定会保证M1,M2的执行顺序吗?M1 M2或M2 M1,就像事务调度一样。 会不会在M2执行的过程中,M1开始执行呢? 如果Dotnet自身并不这样保证,那么怎么才能够实现这种需求呢? 如果是多线程,可以使用通过对象锁定进行线程同步,现在遇到的情况是M1,M2 均在一个线程中执行? 不知道谁有这方面的经验,谢谢指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Ivony
2007-06-13
打赏
举报
回复
你直接在M2/M1一开始判断M1/M2是否存在,存在就Join它,这样就保证顺序了……
phommy
2007-06-13
打赏
举报
回复
当我做了以下修改时,我的机器很不争气的死掉了...
private void timer1_Tick(object sender, EventArgs e)
{
while(true) Application.DoEvents();
}
phommy
2007-06-13
打赏
举报
回复
做了个实验,当一个方法在进行中的时候,Timer事件是不会触发的。
但如果在进行中的方法中调用了Application.DoEvents(),则在此处阻塞并触发Timer事件(如果事件发生了的话),处理完事件再回来继续执行
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
while (this!=null)
//Application.DoEvents() ;
return;
}
private void timer1_Tick(object sender, EventArgs e)
{
this.Text += "1";
}
whslovexyp
2007-06-13
打赏
举报
回复
在同一个线程上的话你不需要lock,但现在是不同的线程操作同一个数据,因此要lock,正是你所想的lock(object)
sherwinzhubuaa
2007-06-13
打赏
举报
回复
@shilei831115
加入M1,M2会操作同一个数据,如M1,M2同时对数组进行修改操作,这样就有可能出问题了。
sherwinzhubuaa
2007-06-13
打赏
举报
回复
@seonxp
将M1,M2设置为互斥事件就可以解决你的问题。例如:设置bool locked
具体是怎么做的,我不太明白。
你指的是lock(object)?,问题是M1,M2被在同一个线程执行时,lock好像不行。
shilei831115
2007-06-13
打赏
举报
回复
多线程执行同一个方法又不会损坏数据,或者锁定数据,执行顺序莫非非要考虑进去吗
seonxp
2007-06-13
打赏
举报
回复
由于线程调度,确实会发生M1执行一半然后执行M2的情况,所以没有办法确保他们之间的顺序,但是你可以通过将M1,M2设置为互斥事件就可以解决你的问题。例如:设置bool locked,当M1,M2事件中的一个执行时,锁定 locked,执行完解锁。关于互斥,可以参考MSDN和操作系统的相关内容。
sherwinzhubuaa
2007-06-13
打赏
举报
回复
一个线程同时只能做一件事,所以M1和M2不会同时被执行的!
会不会M1方法执行到一半(如果有10条语句,执行到第5条),开始执行M2 ,M2 完成后,再执行M1剩下的一般呢?
whslovexyp
2007-06-13
打赏
举报
回复
M1在线程池的线程中,M2在UI线程中,不会有执行顺序问题。
commandosvvv
2007-06-13
打赏
举报
回复
up!
定时器控制的方法m1,
还是取决于这个定时器是否单独另开了一个线程,
如果是的话,才有可能m1,m2同时在执行,
如果不是,那当然要看进程执行时调用的先后顺序,而不是定义的先后顺序。
wzd24
2007-06-13
打赏
举报
回复
一个线程同时只能做一件事,所以M1和M2不会同时被执行的!
wzd24
2007-06-13
打赏
举报
回复
Form命名空间下面的Timer组件引发的事件是在主线程执行的。所以不会出现线程冲突,楼主不需要担心这个问题。
aSalt
2007-06-13
打赏
举报
回复
JF
sherwinzhubuaa
2007-06-13
打赏
举报
回复
@Ivony
你直接在M2/M1一开始判断M1/M2是否存在,存在就Join它,
没有明白你说的意思
+load
方法
的
执行
顺序
你了解么?
可能+load
方法
应该是每个iOS开发同学都非常熟悉的
方法
,而且面试中+load
方法
相关的面试提也是非常常见,...类和分类的+load
方法
的
执行
顺序
? 同一个类的不同分类的+load
方法
的
执行
顺序
? 父类和子类的+load
方法
的执...
vue
方法
按照
顺序
执行
在调用后台
方法
的时候,由于调用了多个
方法
,但是
执行
的时候并没有按照
顺序
执行
,前端需要后台返回的数据,对数据进行页面展示,由于没有按照
顺序
执行
,导致前台页面报错。// 等待
方法
1、2、3
执行
完成后
执行
方法
...
Java单元测试类如何让指定测试
方法
的
执行
顺序
(@Test)
不知道大家有没有注意,加了@Test的测试
方法
为什么不是按代码的先后
顺序
依次
执行
的呀。。。我是觉得挺郁闷的,查查资料整理了下~~~欢迎大家批评指正^ ^
执行
顺序
主要跟下面这个注解有关 @FixMethodOrder() @...
【Vue】
方法
顺序
执行
虽然Vue中的
方法
是
顺序
执行
的,但是如果某个
方法
执行
时间很长(比如访问后台数据接口),那后面的
方法
不会等这个
方法
执行
完就会
执行
。这说明,同一个
方法
内可以
顺序
执行
,但是多个
方法
之间并不能严格控制
顺序
执行
。 ...
Java中
方法
执行
顺序
Java中
方法
执行
顺序
:首先是静态块先
执行
,静态
方法
,最后是构造函数。 构造
方法
只有在new对象的时候才会
执行
,静态语句块和静态
方法
在类加载到内存的时候就已经
执行
了。另外,静态语句块只能给静态变量赋值,里面...
C#
110,477
社区成员
642,563
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章