[强制][结束][进程]如何强制结束一个进程
09月 17th, 2008 by admin
Posted in VC/MFC | No Comments »
在多线程调试的时候(XP操作系统下),经常会出现死机的现象,不得不进行重启才能解决。
后来找到一个名为antifreeze的国外软件,在几乎死机的时候还可以调用该程序,将环境进程结束掉。
另外发现,VC环境下,在设置断点断下的时候,这个时候即使用任务管理器无法将此刻调试的进程结束掉,这是为什么?
我的问题是,在系统几乎死机的时候,如果让自己的程序还能获取CPU分配的时间,将我需要结束的进程结束掉?谢谢
普通方法都试了,不行,因为多线程死机的时候,几乎没有程序可以响应了。
有些时候是死在内核模式下,这时候进程管理器通常无法结束。或许有些情况可以利用驱动程序在内核模式下结束进程。
能具体给出实例吗?谢谢!
LS的方法不错,学习了!
mark
AllocConsole/FreeConsole即可
多线程调试的时候,确实是会经常假死,但是可以用以下方法解决(本人经验。^^)
打开记事本,写一些东西,别保存,当调试发生假死的时候。可以按ctrl+alt+del选择注销,系统会把VC给结束掉,之后会问时候保存文件,点取消即可恢复正常。从而避免重新启动机器。
以前编译过一个GINA(代码不是我的)。就是对付VC调试造成系统假死的。同样有效。
———————
我的问题是,在系统几乎死机的时候,如果让自己的程序还能获取CPU分配的时间,将我需要结束的进程结束掉?谢谢
普通方法都试了,不行,因为多线程死机的时候,几乎没有程序可以响应了。
———————-
你说的这些话是不对的,首先假死的时候,系统还可以快速响应热键!例如ctrl+alt+del,antifreeze也是如此。其次,发生假死的时候CPU空闲接近100%!不信你就按下热键,选择任务管理器。第三,antifreeze接收到热键,会切换到另外一个桌面,并挂起所有的线程,结束进程应该是TerminateProcess,我在调试器里发现它被调用。第四,要结束的进程不是被调试进程,而是VC。
关注 接分
[指针][强制][转换]关于指针强制转换的问题
07月 9th, 2008 by admin
Posted in VC/MFC | No Comments »
最近在弄一个MFC的程序,其中有很多强制类型转换的语句,我有点不懂,请教一下大家
主要就是CMainFrame* frame=(CMainFrame*)AfxGetMainWnd();
CServerDoc* doc=(CServerDoc* )(frame->GetActiveView()->GetDocument());
第一句涉及到 CWnd*到cmainframe*的转换,我知道cmainframe继承的是cframewnd继承的是cwnd
第二句涉及到从CDocument*到CServerDoc*的转换,是CServerDoc继承CDocument的。
我想问,是不是可以将父类强制转换成子类的指针阿?还是子类可以转换成父类的指针?
前一种情况下,是不是子类新加的东西父类不能访问阿?
我个人认为都可以啊,它只是一个指针,不是变量的内存区域,按内存区域的实际变量转化指针类型,便于访问,
对
C++中指针指向的是内存中的地址, 内存中存储的都是按二进制数存储的, 因此所有的指针类型都可以强制转换。
但有可能得不到你想要的效果,如有两个类A和B,B派生于A, 且增加新方法print();
A* pa = new A();
B* pb = pa;
pb.print(); //调用就会出错
子类类型的指针可以强制转化为父类类型的进行操作
反过来可能会出错,不建议
子类类型的指针可以强制转化为父类类型的进行操作,这是类型上传,所以安全。
反过来的话,除非你明确地知道要转换成哪个子类,否则会很危险。
AfxGetMainWnd()函数多数时候是用来获得指向CMainFrame的指针的,所以你大可以放心地在其前面加上 CMainFrame* 来进行强制类型转换。
支持!
[vs2005][程序][强制]用vs2005写MFC程序能否强制用MFC42.DLL而不使用系统默认的MFC80.dll
07月 9th, 2008 by admin
Posted in VC/MFC | No Comments »
RT
程序在vc6下和vs2005下均能编译,只是vs2005编译出来的不能在客户机上执行,希望降低对客户机的要求,
其他模式的已经知道怎么弄,现在就想知道能否在vs2005上以vc6的环境编译。
“只是vs2005编译出来的不能在客户机上执行”是什么意思?
vc6的编译器在有些方面对C++标准的支持并不是很好,而且vs2005的编译器除了在标准方面支持得更好外,还对编译出来的程序性能方面做了一些优化,建议还是采用vs2005。不明白vs2005编译出来的程序不能在客户机上运行是什么意思,如果缺少相应的dll文件的话,打包的时候安装下不就是了。
vs2005编译出来的咚咚,在没有MFC80.DLL的机器上不能跑,但是我又不想再要求客户机器上有MFC80.DLL的咚咚,或是打包在执行程序里,总之就希望客户端尽可能简单!
静态链接,或者不使用MFC库。
MFC42.DLL 默认也是没有的吧
5楼,用是肯定用了的,这个不在讨论范围,静态链接还是太大了。
6楼,我默认装的XP有哦,能支持MFC42.DLL就可以了,目的就达到了!
MFC不是操作系统默认安装的
不能的。你可以单独拷贝那几个MFC80XXX.dll一起发行,这样机器就不必安装VS2005了,MFC40xxx.dll也不是一样需要拷贝吗
静态链接你的MFC程序
不过大了点
不能的。你可以单独拷贝那几个MFC80XXX.dll一起发行,这样机器就不必安装VS2005了,MFC40xxx.dll也不是一样需要拷贝吗
===================================
MFC40XXX.dll在绝大多数机器都是有,因为VC6很经典,很多程序都是在VC6下用MFC做的,MFC40XXX.dll很多程序已经安装了.
干脆就用VC6得了
看来,结论就是“干脆就用VC6得了”,呵呵!结题。