热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在VC中使得一段代码不被中断的执行完

我想在vc中一次执行少量的代码,由于一些特殊的原因不能被中断,怎么才能做到这一点呢?由于windows在用户模式下不可以执行关中断的特权指令,所以无法通过关中断来实现。
我想在vc中一次执行少量的代码,由于一些特殊的原因不能被中断,
怎么才能做到这一点呢?
由于windows在用户模式下不可以执行关中断的特权指令,所以无法通过关中断来实现。

37 个解决方案

#1


也就是说不能让任何消息中断你的程序咯,如果知识一点点代码的话,应该不会中断掉的,CPU的任务调度时间片不短啊。
不过要是很特殊的指令来了的话那就另当别论了!
实在不行,那你就来个DDK好了,取得0 RING的特权,靠,看谁还打断你!

#2


把线程设成实时

#3


学习

#4


sohou说的不错,使用驱动程序来执行你的代码,系统不能中断。不过,假如发生了问题,那么代价将是:蓝屏~

#5


提高线程的优先级也是不行的,好像window对优先级的实现有问题,只是简单的按照优先级排队,其它线程还是有机会被执行。
驱动程序我也试过,不过和应用程序的联系比较复杂,而且代价比较高呀。如果谁有这方面的代码,可以给我发一份吗。

#6


设置实时优先级

#7


给程序加锁。

#8


只有写驱动,独占所有的时间片

#9


呵呵,UP!

#10


API:
EnterCriticalSection()
DeleteCriticalSection()
InitializeCriticalSection()
LeaveCriticalSection ()

#11


to: ShaftWhy(归去来兮)
设置实时优先级是没有用的,我试过。

xjtt2000(沧海一笑):
给程序加锁。怎么个加锁法?

#12


to QunKangLi(雾痕):
你说的是进程内同步,是阻止进程内其它程序进入,而不是阻止中断。

#13


写驱动,把IRQL提高到PASSIVE_LEVEL级别以上,不接受线程调度。

#14


但是,运行在任何IRQL级上的活动都可以被更高IRQL级上的活动中断。所以彻底不响应中断的话还是使用cli吧。不过不能太长时间。

#15


这是不可能实现的。。。

熟悉操作系统的人都知道。
除非你能控制到你的那段代码恰好在一个操作系统调度的时间片里执行完,就像上面有个兄弟说的那样

#16


实在不行,那你就来个DDK好了,取得0 RING的特权,靠,看谁还打断你!


---------------------
软件中断呢?硬件中断呢?
Ring 0不是万能的

#17


fzd999(花差花差):

不会吧,,,驱动也分优先级别的,低级别的驱动绝对有可能被高级别的驱动所中断,还有硬件中断这些。。。

#18


其实写驱动时关中断即可,确实如此,不过我不知道操作系统是否有什么原语可以简单一些。
写驱动还是比较麻烦的呀,搞不好操作系统就崩溃了。而且要传递参数也比较麻烦的。
还有,我觉得写软中断或许可以实现,在其中就是根据eax的值决定是关中断还是开中断,
不过我的驱动没有加载成功,如果谁有这方面的代码,希望提供一下。

#19


os理论中确实有原语一说,不过到现在没有碰见过。
硬件中断优先级最大,写驱动又怎样?我强行把电源拔了你不照样不行。

#20


关掉中断是很危险的。。。

#21


把CPU砸了照样不行  *_~

#22


自己up一下

#23


再次up一下

#24


怎么没有人回答呀?

#25


可惜不是LINUX,没有原语给我们用:(
有难度,你不妨发个消息给Mr袁峰咨询一下:)

#26


复杂的,好像在盖茨的世界里不允许老大这么做

#27


这问题好难.在说软件都不是咱们写的.没办让操作系统呀.编程器按我们的思想做事.同意上楼的N次发言

#28


有没有精通window内核的高手解答一下?

#29


再次up一下

#30


自己写个驱动级的程序就可以了。

#31


写驱动参数传递比较复杂,我没写过,哪为仁兄帮个忙?

#32


还有,本来要执行的代码很少,却要进行2次内核模式与用户模式的切换,很费cpu时间的,
我觉得不太合算,但也没有什么好办法。


其实我想这么做的目的很简单,就是有一个队列,一个实时线程从队首读元素,读完后删除,
但是这个线程不可以被阻止执行(即不可以通过临界区来同步,因为临界区的原理是被别人占用时阻止进入)。另外的线程从队尾增加数据。增加只需要很少的代码,但是有可能在增加过程中被实时线程中断,而产生问题。提高其它线程在增加数据时的级别也没有用,因为实时线程是硬件中断,所以想把增加元素的代码一次执行完,让实时线程稍微等这一点时间是没有什么问题的。但利用同步就会出现问题。

#33


其实解决问题很多途径
可不可以回头看看问题,是否还有其它的解决途径?
在一个支持多线程/时间片轮转的操作系统里,
控制cpu为你的进程独享,这本来就是个矛盾的问题
那解决途径就成为:你只能跳过操作系统的调度,自己去控制

#34


再次up一下

#35


最近看了在用户态执行特权指令的文章,没怎么弄清楚,不知有哪位高人能给个例子

#36


看来实现起来有问题了。
结帖吧。

#37


看来实现起来有问题了。
结帖吧。

推荐阅读
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
author-avatar
清雅竹gf_644
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有