社区
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 均在一个线程中执行?
不知道谁有这方面的经验,谢谢指教!
...全文
236
15
打赏
收藏
方法是顺序执行的吗?
假设有一个类A,它有2个方法M1,M2。M1因为定时器会周期性的执行,M2由用户操作引发执行。 问题是,程序执行的时候,一定会保证M1,M2的执行顺序吗?M1 M2或M2 M1,就像事务调度一样。 会不会在M2执行的过程中,M1开始执行呢? 如果Dotnet自身并不这样保证,那么怎么才能够实现这种需求呢? 如果是多线程,可以使用通过对象锁定进行线程同步,现在遇到的情况是M1,M2 均在一个线程中执行? 不知道谁有这方面的经验,谢谢指教!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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它,
没有明白你说的意思
EasyUI项目
本项目采用struts2+JDBC+easyui进行编写,对easyui各个组件进行详细介绍。 由于水平有限,项目bug在所难免,欢迎指正。 博文参考地址:http://blog.csdn.net/itmyhome1990/article/details/37502601 使用
方法
: 1、首先你的电脑得安装有mysql、myeclipse 2、
执行
init.sql里的语句,
顺序
执行
即可。 3、将项目easyui导入到myeclipse中,部署,运行 4、打开浏览器,输入http://localhost:8080/easyui/
Java中线程到底是按什么
顺序
执行
的?
Java中线程到底是按什么
顺序
执行
的? 本文分享自华为云社区《【高并发系列】Java中线程到底是按什么
顺序
执行
的?你了解的可能是错误的!》,原文作者:冰河 。 【摘要】Java中线程的
执行
顺序
可能与你想的不一样!一文解密多线程的
执行
顺序
,调用Thread的start()
方法
启动线程时,线程的
执行
顺序
是不确定的。也就是说,在同一个
方法
中,连续创建多个线程后,调用线程的start()
方法
的
顺序
并不能决定线程的
执行
顺序
。 线程的
执行
顺序
是不确定的 调用Thread的start()
方法
启动线程时,线程的
执行
顺序
+load
方法
的
执行
顺序
你了解么?
可能+load
方法
应该是每个iOS开发同学都非常熟悉的
方法
,而且面试中+load
方法
相关的面试提也是非常常见,但你了解的+load
方法
真的跟实际上的一样么? 看文章之前先思考几个问题 +load
方法
在什么时候? +load
方法
是如何
执行
的? 一个类的+load
方法
会
执行
几次? 类和分类的+load
方法
的
执行
顺序
? 同一个类的不同分类的+load
方法
的
执行
顺序
? 父类和子类的+load
方法
的执...
java三个线程
顺序
执行
_如何保证多线程按
顺序
执行
完成?
我们知道线程
执行
时机是CPU时间片轮询策略决定的,那么有没有办法让线程按指定的
顺序
执行
呢?下面就通过JAVA提供的两种API来实现。1.首先定义三个线程对象,用来模拟多线程
执行
顺序
。staticThreadthread1=newThread(newRunnable(){@Overridepublicvoid run() {System.out.println("1");}});staticThre...
如何控制Javascript
执行
顺序
?
如何控制Javascript
执行
顺序
?在JavaScript中,控制代码
执行
顺序
的
方法
有很多种。
C#
111,098
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章