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

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

  • 相关阅读:
    php 给图片添加文字水印 可控制位置,旋转,多行文字
    太多的用户请求,网站出现了504
    这些问题,你注意了吗?
    ubuntu 系统环境配置记录
    node.js开发指南中出现的问题 has no method 'router'解决办法
    在nodejs express 中使用session的功能
    更改窗口大小,重新加载微博发布框
    原生js控制audio标签自动播放
    利用css3转换transform画五星红旗
    css3+js旗帜飘动
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1685269.html
Copyright © 2011-2022 走看看