zoukankan      html  css  js  c++  java
  • 默认情况下程序启动后到底是几个线程?

    默认情况下,在调试状态下我们可以看到下面的效果

    image

    这里面的线程中

    • 主线程 不必多说,就是程序的主要工作线程
    • SystemEvents线程之前探讨过是系统事件触发之后的工作线程
    • 另外几个线程,很奇怪。但至少那个vshost.RunParkingWindow,从字面上说可能与vshost有关

    接下来,我们尝试禁用掉vshost(下图中禁用“启用Visual Studio宿主进程”)

    image

    再来看线程信息

    image

    整个世界清净多了,现在就剩下了一个线程。这与我们一般意义上讲的单线程程序是相吻合的。

    那么,为什么连那个System Events线程都没有了呢?这是因为我们当前程序并没有监控有关的SystemEvents事件,所以它默认是不会创建这个线程的

    如果我们添加了如下的代码

    using System;
    using System.Threading;
    using Microsoft.Win32;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            
            static void Main(string[] args)
            {
    
                Console.WriteLine("Main Thread ID:{0}", Thread.CurrentThread.ManagedThreadId);
    
                SystemEvents.TimerElapsed += new TimerElapsedEventHandler(SystemEvents_TimerElapsed);
                SystemEvents.CreateTimer(1000);
                Console.Read();
    
    
            }
    
            static void SystemEvents_TimerElapsed(object sender, TimerElapsedEventArgs e)
            {
                Console.WriteLine("System Events Thread ID:{0}",Thread.CurrentThread.ManagedThreadId);
            }
    
        }
    }
    

    那么,此时就可以看到那个辅助线程了

    image

    那么,到这里为止,你应该知道了,一个应用程序开起来之后到底会有几个线程了吧?

  • 相关阅读:
    大学生自学网
    如何保证主从复制数据一致性
    CDN
    后端 线上 服务监控 与 报警 方案2
    利用 Gearman 实现系统错误报警功能
    增量部署和全量部署
    后端线上服务监控与报警方案
    简析TCP的三次握手与四次分手
    301 和 302 对 SEO 的影响
    Linux 查看负载
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1685269.html
Copyright © 2011-2022 走看看