社区
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 均在一个线程中执行?
不知道谁有这方面的经验,谢谢指教!
...全文
267
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它,
没有明白你说的意思
django手机访问_Python小技巧:QPython,一个在手机上运行Python的神器
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来有障碍。今天安利一款更友好的QPython。Qpython是一个Python引擎,只能运行在安卓系统上,相比Termux,它可以全图形界面操作,非常友好。内置了一个Python编辑器,可以直接在手机上...
QPython,一个在手机上运行Python的神器
QPython 是一个在 Android 设备上运行 Python 的脚本引擎。它可以让您的 Android 设备运行 Python 脚本和项目。它包含 Python 解释器、控制台、编辑器和适用于 Android 的 SL4A 库。
django手机访问_在手机上运行Python的神器
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来有障碍。今天安利一款更友好的QPython。Qpython是一个Python引擎,只能运行在安卓系统上,相比Termux,它可以全图形界面操作,非常友好。内置了一个Python编辑器,可以直...
阿里资深程序员做出了一款可以在手机上运行Python的神器,快快学
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来有障碍。今天安利一款更友好的QPython。 Qpython是一个Python引擎,只能运行在安卓系统上,相比Termux,它可以全图形界面操作,非常友好。 内置了一个Python编辑器,可以...
python手机版破解wifi脚本,python手机版安装教程
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来有障碍。由于内置了SL4A,可以很方便的调用安卓操作系统的一些API做些有趣的事情,比如可以通过SL4A获取手机地理位置,打开蓝牙,发送手机短信,打开手机摄像头等等。不过国内的手机安卓应用市场上也有,可以直接搜索qpython,看发布者是一家北京的公司,不清楚这家公司跟QPython是什么关系。
C#
111,130
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章