进程和线程

一、进程:
//进程用到的类Process,需要进行解析 using System.Diagnostics

Process.Start("calc");//Process是非静态方法,括号里面是要开启的进程的名字

(静态方法与非静态方法区别:静态方法不用实例化对象,直接可以点出里面的方法)

弊端:有许多程序不知道它的运行名字到底是什么,如果写错了,就会出现程序崩溃错误

//选择程序
        private void button1_Click(object sender, EventArgs e)
        {
            //进程用到的类Process,需要进行解析  using System.Diagnostics
            //最简单基本的方法
            //Process.Start("calc"); //Process是非静态方法,直接点出里面的方法,括号里面是要开启的进程的名字
            //Process.Start("notepad");//打开记事本
            //Process.Start("QQ");//打不开,有许多程序不知道它的运行名字到底是什么,如果写错了,就会出现程序崩溃错误

            //选择程序,用到对话框控件中的 openFileDialog
            openFileDialog1.Filter = "应用程序|*.exe";//设置一下,选择文件时只显示exe的文件
            DialogResult dr = openFileDialog1.ShowDialog();
            if (dr == DialogResult.OK)//如果点击确定
            {
                textBox1.Text = openFileDialog1.FileName;//打开文件名
            }
        }
//打开程序
        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")//选择程序
            {
                try//防止程序崩溃try一下
                {
                    //实例化进程类
                    Process p = new Process();
                    //创建进程开启路径对象,实例化
                    ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text);
                    //进程类开启路径指向,设置一个属性,指定进程类要开启的是哪个进程
                    p.StartInfo = psi;
                    //启动进程,不是立刻开启,什么时候开启是由CPU决定,排队开启
                    p.Start();
                }
                catch
                {
                    MessageBox.Show("未找到指定程序,请确认程序路径!");
                }
            }
            else//还没有选择程序
            {
                MessageBox.Show("请先选择要打开的程序!");
            }
        }

二、线程:

进程理解成为一个公司,公司默认有一个老板

老板就理解成为主线程

线程理解成为员工,公司里有好多事,不能都让老板来干,干不过来

员工去做一件事,不会耽误老板的正常工作

程序为什么会假死?因为主线程被占用了

线程去执行一段需要时间的代码,主线程不会被占用,程序就不会出现假死状态了

//创建线程类,并使用委托,指定这个线程要执行的是哪个函数
Thread th = new Thread(aaa);
//开启线程执行功能,也不是立刻执行
th.Start();

(1)问题一:
                 线程可以开启很多个,如果用户可以无限点击按钮,那么有可能会造成电脑CPU使用率过高

                 用线程执行方法,只能传一个参数,并且此参数必须是object类型

                 程序默认不允许跨线程访问对象

办法:关闭监控就可以了

                怎么关?

                          在构造函数中,实例化方法下面加上这句话:

                          Control.CheckForIllegalCrossThreadCalls = false;

(2)问题二:

默认主窗体已经关闭,但是线程如果还未执行完工作内容,那么会默默的继续执行,直到执行完毕后才会将整个进程关闭

                 程序默认所有的线程都为:前台线程

 办法:将新开的线程变为后台线程
                  th.IsBackground = true;

三、总结:
(1)线程所在的命名空间:System.Threading;

(2)线程类:Thread th = new Thread(方法名);

//没有不要参数的构造函数,常用的为,1个参数,参数类型是委托类型,需要一个方法指向

(3)变为后台线程:th.IsBackground = true;

(4)线程启动:th.Start();

如果要执行带参数的方法,那么这个方法的参数必须是object类型,参数传递的位置在Start方法的括号中

(5)允许跨线程访问对象

在构造函数的构造方法下面加上:

Control.CheckForIllegalCrossThreadCalls = false;

(6)停止线程:th.Abort();

时间: 2024-10-21 13:23:44

进程和线程的相关文章

linux查看某个进程的线程id(spid)

鉴于linux下线程的广泛使用 我们怎么查看某个进程拥有的线程id了 现在很多服务的设计 主进程->子进程->线程(比如mysql,varnish) 主进程负责侦听网络上的连接 并把连接发送给子进程 子进程派生线程去处理这些线程 mysql(父进程460,子进程863) 1 460 425 333 ? -1 S 0 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/storage/mysql/backup --pid-file=/

该进程或线程自上一个步骤以来已更改

相关解决办法如下: VS进行高度时,断点处提示"该进程或线程自上一个步骤以来已更改" 每个断点跑两遍似的. 这个是由于在VS环境中 勾上了 "工具\选项--->调试--要求源文件与原始版本完全匹配"这个项 该进程或线程自上一个步骤以来已更改 英文表述:The process or thread has changed since last step 以下是是从网上摘录的解决办法. Q: I have a console application that exe

进程和线程、内核空间等概念

用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间.针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较

进程和线程有什么区别?

作者:榴莲艺声链接:https://www.zhihu.com/question/21535820/answer/22915780来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一.关于进程和线程,首先从定义上理解就有所不同 1.进程是什么? 是具有一定独立功能的程序.它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序. 2.线程又是什么? 线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的

Python自动化开发,Day10 - 进程、线程、协程

本章内容 操作系统发展史介绍 进程与线程的区别 python GIL全局解释器锁 线程 语法 join 线程锁Lock\Rlock\信号量 将线程变为守护进程 Event时间 Queue队列 生产者消费者模型 进程 语法 进程间通讯 进程池 一.操作系统发展史介绍 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存

进程、线程和上下文切换

进程是什么? 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed). 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 进程的概念主要有两点:第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(textregion).数据区域(data region

多线程编程(进程和线程)

多线程编程(进程和线程) 1.进程:指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以启动多个线程. 2.线程:指程序中一个执行流程,一个进程中可以运行多个线程. 一.创建线程(两种方式) 二.线程的5种状态( New,Runnable,Running,Block,Dead ): 三.线程的优先级 四.守护线程 /精灵线程/后台线程 五.方法 六.同步代码锁(synchronized) 一.创建线程(两种方式): 方式1:采用继承Thread的方法 第一,继承 Thre

进程与线程

1.进程与程序的区别? 进程与程序的区别:程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 令(二进制代码)和数据的静态实体:而进程可以认为是已经被OS从磁盘加载到内存上的.动态的.可运行的指令与数据的集合,是在运行的动态实体. 2.进程的概念 程序的运行实例(但这并不代表进程就是在运行,根据OS的调度,进程会处于不同的状态),进程是OS进行资源分配的基本单位. 3.线程的概念 线程是进程的一个执行分支,是OS进行调度的基本单位. 4.进程与线程的区别 除了上述概念上的区别外,进程强调资源

走近并发编程之一 进程和线程

并发与并行,进程与线程不仅是操作系统中及其重要的概念,也是并发编程入门 必须要理解的核心知识. 什么是并发?并发与并行的区别 顺序编程:程序中的所有事物在任意时刻都只能执行一个步骤 并发:在同一时间段内,需要处理多个任务,而在每个时间点又只能处理一个,这就是并发. 假设我们要把多个任务分配给处理机,如果这台机器有多个处理器,显然可以同时执行这些任务,这就是并行. 不同于并行,并发的目的旨在最大限度的提高程序在单处理器上的效率.前者是在物理上的同时发生,而并发是在逻辑上的同时发生.如图,如果要在同

程序,进程,线程(需补充)

1.程序,进程,线程 程序:程序时完成特定任务的一系列指令集合. 进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发