C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何将Ctrl-C消息传递给在Windows上运行的进程?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个C#控制台应用程序,通过将它订阅到Console.CancelKeyPress事件来处理Ctrl-C.当我执行(调试版本)应用程序时,在该过程中已经创建了14个线程.当我按下Ctrl-C时,创建了一个新的第15个线程并调用了我的处理程序.我使用sysinternals中的进程资源管理器来查看进程的状态.

我很想知道关于如何将Ctrl-C消息传递给进程以及如何创建其他线程的内部结构?我想,即使我不订阅某个事件,它仍然会创建一个额外的线程并退出该进程.如何为应用程序设置处理Ctrl-C的认机制.

我是.net开发人员,但想了解Windows操作系统是如何工作的.以上问题仅仅是出于好奇学习Windows操作系统.

解决方法@H_801_8@
当Windows需要通知控制台程序外部事件时,没有窗口消息循环发送通知,因此Windows将在目标进程中执行 create a thread以执行任何定义的回调函数. CTRL C事件的认处理程序只调用ExitProcess,但是挂钩CancelKeyPress事件会使用处理函数调用Win32 SetConsoleCtrlHandler函数.

handler function的文档解释了它的工作原理:

请注意,Windows注入到您的进程中的线程具有相当小的堆栈,因此CLR处理程序例程实际上将Threadpool工作项排队以执行您的事件处理程序.这意味着Windows和工作线程注入的线程都可以创建,导致在处理CTRL C事件期间最多可以看到2个额外的线程.

大佬总结

以上是大佬教程为你收集整理的如何将Ctrl-C消息传递给在Windows上运行的进程?全部内容,希望文章能够帮你解决如何将Ctrl-C消息传递给在Windows上运行的进程?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。