社区
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 均在一个线程中执行?
不知道谁有这方面的经验,谢谢指教!
...全文
235
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三个线程
顺序
执行
_如何保证多线程按
顺序
执行
完成?
我们知道线程
执行
时机是CPU时间片轮询策略决定的,那么有没有办法让线程按指定的
顺序
执行
呢?下面就通过JAVA提供的两种API来实现。1.首先定义三个线程对象,用来模拟多线程
执行
顺序
。staticThreadthread1=newThread(newRunnable(){@Overridepublicvoid run() {System.out.println("1");}});staticThre...
如何控制Javascript
执行
顺序
?
如何控制Javascript
执行
顺序
?在JavaScript中,控制代码
执行
顺序
的
方法
有很多种。
有三个线程T1,T2,T3,如何保证
顺序
执行
?
调用 `T1.join()`,`T2.join()`
方法
,让线程 T1 先
执行
完成再
执行
T2,以此类推。可以创建一个 `CountDownLatch`,并在每个线程中调用 `countDown()`
方法
,当计数器为 0 时,保证这三个线程按
顺序
执行
。可以使用 `CountDownLatch`、`Semaphore` 或者 `join()`
方法
来保证三个线程 T1、T2 和 T3 按照特定
顺序
执行
。可以使用一个 `Semaphore` 对象,初始值为 1,依次控制这三个线程的
执行
顺序
。
vue中
方法
执行
顺序
问题
了解原因VUE中的
方法
调用
顺序
是依次进行的,
方法
体内部也是依次
执行
的,但是,两个
方法
体的
执行
顺序
并不能严格控制,不一定一个
方法
执行
完再
执行
另一个。async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的
执行
不会阻塞后面代码的
执行
,async 函数返回的是一个promise 对象,可以使用then
方法
添加回调函数。当函数
执行
的时候,一旦遇到await就会先返回,等到异步操作完成,再接着
执行
函数体内后面的语句。
C#
111,098
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章