首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
0
0
[求助]菜鸟问题,同一线程中的一行代码会因为其它事件的发生而被中途打断吗?
发表于: 2014-8-19 10:20
5961
[求助]菜鸟问题,同一线程中的一行代码会因为其它事件的发生而被中途打断吗?
winampme
2014-8-19 10:20
5961
比如,我在给一个全局变量自加1,此时有按钮点击事件发生,在该按钮事件中也会给这个变量自加1,因为VC中一行代码翻译为汇编会变为几行代码,如果这几行汇编代码只执行了一部份的话,会使变量值并不会按编程者的意思来自加。
不知道我有没有表达清楚,就是在多线程中访问同一个变量的话,如果不做特殊处理的话,会出问题。那么在同一个线程中,因为事件的发生,也会出现这种问题吗?因为当有事件的时候,应该CPU会放下手中工作,去处理这个事件吧?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
10
)
小小笑儿
雪 币:
61
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
85
粉丝
1
关注
私信
小小笑儿
2
楼
同一线程,不会
2014-8-19 10:59
0
bxc
雪 币:
7048
活跃值:
(3527)
能力值:
( LV12,RANK:340 )
在线值:
发帖
245
回帖
1332
粉丝
26
关注
私信
bxc
6
3
楼
你的按钮事件肯定是通过消息队列来通知你的程序的啊。
你在外部给全局变量+1时,此时就算有按钮消息发送,你的程序也处理不了啊。
等你的代码执行完全局变量+1,进入消息循环里才会处理按钮消息的。
你要搞清楚,不是你点击了按钮,线程就会去处理你的按钮事件。
你点击了按钮不过是把按钮被点击的消息发送的线程的消息队列里面去了。
你的线程需要GetMessage或者PeekMessage来处理。
2014-8-19 12:08
0
czcqq
雪 币:
350
活跃值:
(87)
能力值:
( LV7,RANK:110 )
在线值:
发帖
6
回帖
295
粉丝
3
关注
私信
czcqq
2
4
楼
同一个线程中就不会出现这个问题
2014-8-19 13:05
0
guyue三十五
雪 币:
8
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
100
粉丝
0
关注
私信
guyue三十五
5
楼
这样说是明白了点 但是既然window是消息驱动的 程序做着的都是响应相应的消息 那么我们这个程序中的+1 实质上是在响应什么消息啊
2014-8-19 15:03
0
小小笑儿
雪 币:
61
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
85
粉丝
1
关注
私信
小小笑儿
6
楼
咦,不是LZ了啊。说明白点啊,哪个+1哦?
2014-8-19 15:44
0
君君寒
雪 币:
6092
活跃值:
(699)
能力值:
( LV4,RANK:45 )
在线值:
发帖
72
回帖
1064
粉丝
0
关注
私信
君君寒
7
楼
一般情况下,按钮事件是wm_common消息。你可以通过spy++来捕捉消息的
2014-8-25 08:23
0
Rtsjx
雪 币:
112
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
19
回帖
131
粉丝
0
关注
私信
Rtsjx
8
楼
让CPU停止当前执行的线程通常只有两种情况,一个是遇到了中断,另一个就是线程被调度等待。Windows的事件是不一定会强行中断当前执行的代码流的。
2014-8-25 10:08
0
guyue三十五
雪 币:
8
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
100
粉丝
0
关注
私信
guyue三十五
9
楼
哦。。是不是一般我们自己写的一些语句 都是在wm_common消息中执行的啊?而且我记得好像还有一个WM_USER(好像是)的消息哦 是不是程序中没有定义 系统就不会传递这个消息给程序啊?
2014-8-26 01:28
0
dppdpp
雪 币:
23
活跃值:
(11)
能力值:
( LV2,RANK:10 )
在线值:
发帖
18
回帖
365
粉丝
0
关注
私信
dppdpp
10
楼
一、楼主说情况,如果是在“多线程界面”编程里是有可能发生的,在没 执行完主线程的+1,就会提前响应按扭消息,但看好,只限于多线程,因为有可能没执行完加1就被系统按时间片调度了。
二、针对这种情况,咱们的VC里有一种叫技术叫临界区,EnterCriticalSection进入,LeaveCriticalSection退出,便实现了全局性的资源同步,具体如何操作,请baidu.
2014-8-26 07:14
0
acqqer
雪 币:
123
活跃值:
(144)
能力值:
( LV4,RANK:50 )
在线值:
发帖
1
回帖
119
粉丝
8
关注
私信
acqqer
1
11
楼
参见InterLockedIncrement,其实就一句代码:
lock inc dword ptr [ebp + var_offset]
这样就能原子修改一个数据
其中的lock会保证前端总线锁定,这样其他cpu核心不会修改这里,
而inc一个指令原子增,不会发生竞态问题
2014-8-29 12:25
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
winampme
22
发帖
63
回帖
10
RANK
关注
私信
他的文章
[求助]菜鸟问题,同一线程中的一行代码会因为其它事件的发生而被中途打断吗?
5962
[求助]无法将DLL注入的最新版QQ进程中,如何解决呢?
4046
[求助]如何知道一个安装包程序中,安装后,安装了哪些文件到电脑里?
3278
[求助]菜鸟问题,如何把OD和IDA中的地址对应起来?
17239
[求助]WriteProcessMemory失败
4182
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部