问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关闭中断可以setevent吗?

发布网友 发布时间:2023-03-31 16:24

我来回答

3个回答

热心网友 时间:2023-11-12 16:21

如果操作成功,则返回非零值,否则为0。
Win32系统编程API,用于线程间通信。

设置事件的状态为有标记,释放任意等待线程。如果事件是手工的,此事件将保持有标记直到调用ResetEvent,这种情况下将释放多个线程;如果事件是自动的,此事件将保持有标记,直到一个线程被释放,系统将设置事件的状态为无标记;如果没有线程在等待,则此事件将保持有标记,直到一个线程被释放。

线程中SetEvent及WaitForSingleObject用法
SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。
WaitForSingleObject()等待,直到参数所指定的OBJECT成为发信号状态时才返回,OBJECT可以是EVENT,也可以是其它内核对象。
当你创建一个线程时,其实那个线程是一个循环,不像上面那样只运行一次的。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?
在Windows里往往是采用事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,它的实现原理是这样,在那个死循环里不断地使用WaitForSingleObject函数来检查事件是否满足,如果满足就退出线程,不满足就继续运行。当在线程里运行阻塞的函数时,就需要在退出线程时,先要把阻塞状态变成非阻塞状态,比如使用一个线程去接收网络数据,同时使用阻塞的SOCKET时,那么要先关闭SOCKET,再发送事件信号,才可以退出线程的。
当然我感觉重要应用方面还是用来锁定,实现所谓的pv功能。
在调用的过程中,所有线程都可以在一个等待函数中指定事件对象句柄。当指定的对象的状态被置为有信号状态时,单对象等待函数将返回。
对于多对象等待函数,可以指定为任意或所有指定的对象被置为有信号状态。当等待函数返回时,等待线程将被释放去继续运行。
初始状态在bInitialState参数中进行设置。使用SetEvent函数将事件对象的状态置为有信号状态。使用ResetEvent函数将事件对象的状态置为无信号状态。
当一个手动复原的事件对象的状态被置为有信号状态时,该对象状态将一直保持有信号状态,直至明确调用ResetEvent函数将其置为无符号状态。
当事件的对象被置为有信号状态时,任意数量的等待中线程,以及随后开始等待的线程均会被释放。
当一个自动复原的事件对象的状态被置为有信号状态时,该对象状态将一直保持有信号状态,直至一个等待线程被释放;系统将自动将此函数置为无符号状态。如果没有等待线程正在等待,事件对象的状态将保持有信号状态。
多个进程可持有同一个事件对象的多个句柄,可以通过使用此对象来实现进程间的同步。下面的对象共享机制是可行的:
在CreateEvent函数中,lpEventAttributes参数指定句柄可被继承时,通过CreateProcess函数创建的子进程继承的事件对象句柄。
一个进程可以在DuplicateHandle函数中指定事件对象句柄,从而获得一个复制的句柄,此句柄可以被其它进程使用。
一个进程可以在OpenEvent或CreateEvent函数中指定一个名字,从而获得一个有名的事件对象句柄。
使用CloseHandle函数关闭句柄。当进程停止时,系统将自动关闭句柄。当最后一个句柄被关闭后,事件对象将被销毁。一个Event被创建以后,可以用OpenEvent()API来获得它的Handle,用CloseHandle()来关闭它,用SetEvent()或PulseEvent()来设置它使其有信号,用ResetEvent()来使其无信号,用WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号.
PulseEvent()是一个比较有意思的使用方法,正如这个API的名字,它使一个Event对象的状态发生一次脉冲变化,从无信号变成有信号再变成无信号,而整个操作是原子的.对自动复位的Event对象,它仅释放第一个等到该事件的thread(如果有),而对于人工复位的Event对象,它释放所有等待的thread. 在这个线程函数中只有设置g_event为有信号状态时才执行下面的for循环,因为g_event是全局变量,所以我们可以在别的线程中通过g_event. SetEvent控制这个线程。在这个线程函数中可以可以通过设置MT_INTERVAL来控制这个线程的函数体多久执行一次,当事件为无信号状态时函数体隔MT_INTERVAL执行一次,当设置事件为有信号状态时,线程就执行完毕了。信号是异步通知task的一种机制,HISR是不可以接收信号的,但是可以发送信号。
TCB中与signal相关数据结构包括active_signal,enable_signal(这是一个掩码,如果为0则不执行signal_handler),(*signal_handler),主要有两个函数,一个是send_signals()和signal_shell(),其中send_signals()函数主要是区分发送信号给自己还是给其他的task,如果发给自己就直接执行signal_shell(),如果发送至其他task(处于suspend或ready但没有占用处理器的状态),target task必须要释放占用的protect,因为在signal_handler中可能会去请求protect资源,这样就会发生死锁,当前task执行TCT_protect_switch()函数,与请求protect()函数前半部分一致,调用schele_protect()让target task释放占用的protect资源。在target stack处建立solicited stack,其中PC = &signal_shell,保存target task的status和tc_statck_ptr,根据当前的状态,如果是ready或pure_suspend,则返回,否则就resume_task()唤醒target task,根据返回值确定是否进入schele()。NU中支持的线程通信方式包括queue,pipe,mailbox,这里queue和pipe的机制基本相同,只是queue是按32bit操作,pipe是按照字节访问,但是代码里也做了对齐,mailbox是一种信箱机制,信箱的大小为4*32bit,使用的好处就是执行速度快

内存管理
NU并没有使用到虚拟内存管理,直接访问物理地址,有两种建立内存池的方法,动态内存管理和静态内存管理,动态内存管理采用的分配策略是first-fit和释放后内存融合,静态内存管理是每次分配固定大小的内存块,这样可能会引起内存的利用率降低,但是不会引起内存外部碎片

热心网友 时间:2023-11-12 16:22

是的,您可以使用SetEvent函数来关闭中断。它会将一个事件对象的信号状态设置为有信号状态,调用该函数后,系统就会清除中断标志,这样就可以关闭中断。

热心网友 时间:2023-11-12 16:22

可以的,关闭中断分为两部分:
①在状态寄存器CPSR中屏蔽中断和快速中断
②设置中断屏蔽寄存器
由于第一部分在设置svc模式时已经屏蔽了中断和快速中断,所以在这里就不再介绍
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 卸载暴雪战网很慢 亚服战网怎么下载 内裤是粘纤好还是纯棉好啊? 一条龙船和一条条龙船有什么不同 网上一条龙,现实一条虫什么意思 一条龙什么意思?有什么典故?英文翻译是什么? 电脑放电视等几分钟右上角显示关闭怎么回事 wallpaper壁纸屏幕上有关闭两个字怎么回事 满城尽带黄金甲的背景是哪个朝代? 老人亡故后,孝子手里的白幡是什么个典故 白幡和红幡有什么区別 送葬队伍中举着一个白幡,是干嘛的,有人说是寄托死者的灵魂的,它到底是什么意思,求明白的解释一下 白幡什么意思 微信怎么设置语音提醒? 尼康z7有必要配闪光灯吗 cmos强光照射后变暗 iphone照闪光灯烧cmos 南开大学滨海学院保险系第一年学什么?谢谢了。 用虚拟光驱装WIN7系统 无尽噩梦5怨灵咒怎么刷剑神令 目前小学生体质健康方面存在的问题主要有哪些 小学生体质健康方面存在的问题主要有哪些 目前小学生体质健康方面存在的问题 有什么软件是J-O理论的强度参数计算 solidworks能不能分析简支梁挠度 非因工伤医疗期工资规定 怎么把音乐转成mp4格式 城市让生活更美好作文400字六年级 城市让生活更美好作文三篇 让生活更美好作文 梦见穿白色婚纱的新娘的预兆 为什么结婚时新娘穿白色的婚纱拜托各位大神 怎样更改微信实名认证信息? 循的文言文 炫舞时代,舞力值求解? QQ炫舞中的舞团贡献值怎么弄? 炫舞里的舞团的综和实力怎么算的? 405.9公里是多少米 167.9公里是多少km 0.9km是多少米有多远 389.9公里等于多少米?