步步为营-64-进程&线程

1 进程

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 进程线程
{
    class Program
    {
        static void Main(string[] args)
        {
            //获取当前进程
            Process p1 = Process.GetCurrentProcess();
            Console.WriteLine(p1.Id);
            Console.WriteLine(p1.ProcessName);

            //打开新的进程
            Process p2 = Process.Start("cmd.exe");
            string  key = Console.ReadLine();
            if (key=="k")
            {
                //杀死进程
                p2.Kill();
            }
            Console.ReadLine();

        }
    }
}

2 应用程序域

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 应用程序域
{
    class Program
    {
        static void Main(string[] args)
        {
            //01 获取当前应用程序域
            AppDomain ad = AppDomain.CurrentDomain;
            Console.WriteLine(ad.FriendlyName);
            //02 在当前程序域中打开程序集,不会开启新进程
            AppDomain ap2= AppDomain.CreateDomain("xyxtl");
           int id = ap2.ExecuteAssembly("进程线程.exe");
            Console.Write(id);

           Console.ReadKey();
        }
    }
}

3 线程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 线程
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 01 获取当前线程-默认程序启动后,会有一个主线程
            Thread t1 = Thread.CurrentThread;
            Console.WriteLine(t1.ManagedThreadId);
            #endregion

            #region 02 开辟一个新线程 - 02-01 无参;02-02 有参
            //02-01 有参
            Thread t2 = new Thread(() =>
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId);//输出当前线程编号
                Console.WriteLine("无参,构造函数!");
            });
            t2.Start();

            //02-02 有参
            #endregion

            Thread t3 = new Thread((p) =>
            {
                //由于参数是object类型,如果想访问对象特有成员,需要进行类型转换
                Person p2 = p as Person;
                if (p2!=null)
                {
                    ;
                    Console.WriteLine(p2.Age);
                }

                Console.WriteLine(p.ToString());
            });
            t3.Start(new Person()
            {
                Name = "张三",
                Age = 18,
            });
            Console.Read();
        }

        public class  Person
        {
            public string Name { get; set; }
            public int Age { get; set; }

            public override string ToString()
            {
                return string.Format("姓名:{0},年龄{1}",Name,Age);
            }
        }
    }
}

3.2 IsBackground属性

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 前台线程与后台线程
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread t1 = new Thread(() =>
            {
                while (true)
                {
                    Console.WriteLine(1);
                }
            });
            //休息5秒
           // Thread.Sleep(5000);

            t1.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Thread t1 = new Thread(() =>
            {
                while (true)
                {
                    Console.WriteLine(2);
                }
            });
            t1.IsBackground = true;
            t1.Start();
        }
    }
}

当线程是后台线程时,主线程关闭,后台线程也随之关闭;
当线程是前台线程时,主线程关闭,前台线程不关闭;

时间: 2024-08-29 00:35:22

步步为营-64-进程&线程的相关文章

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selectors模块 # Python队列/RabbitMQ队列

1 # 进程/线程/协程 2 # IO:同步/异步/阻塞/非阻塞 3 # greenlet gevent 4 # 事件驱动与异步IO 5 # Select\Poll\Epoll异步IO 以及selectors模块 6 # Python队列/RabbitMQ队列 7 8 ############################################################################################## 9 1.什么是进程?进程和程序之间有什么

进程线程创建与退出监视(DBGVIEW打印)

曾经想着做个自己的主动防御项目,就是监控而已,实现RING3通信,各方参考学习,想着HOOK 来着 但是有一次知道了无HOOK的方式,感觉这挺方便呀 还是微软承认的函数,那我就实现一套监控的方案,考虑到逆向分析的话就准备后面 有事没事空闲了就去尽量实现HOOK的方式,希望一切顺利,少蓝屏几次.谢谢胡老师教程指导! 这里是代码和注意:实现的是监控进程线程创建退出,如果calc创建则阻止创建(W7 64位通过) 其中注意的是: 进程监视函数 PsSetCreateProcessNotifyRouti

Linux下进程线程,Nignx与php-fpm的进程线程方式

1.进程与线程区别 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源. "进程——资源分配的最小单位,线程——程序执行的最小单位" 进程有独立的地

android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)

继续分析handler 和looper 先看看handler的 public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } } 所以消息的处理分层三种,就是 1.传入一

进程/线程介绍

一.进程 进程可以认为是程序执行时的一个实例.进程是系统进行资源分配的独立的实体,且每个进程拥有独立 的地址空间.一个进程无法直接访问另一个进程的变量和数据结构,如果希望让一个进程访问另一个进程 的资源,需要使用进程间通信,比如:管道,有名管道,信号,信号量,消息队列,套接字等. 一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间.线程和进程的一个主要区别是,同一程序内 的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存).同时 每个线程还拥有自己的寄

进程线程协程那些事儿

一.进程与线程 1.进程 我们电脑的应用程序,都是进程,假设我们用的电脑是单核的,cpu同时只能执行一个进程.当程序出于I/O阻塞的时候,CPU如果和程序一起等待,那就太浪费了,cpu会去执行其他的程序,此时就涉及到切换,切换前要保存上一个程序运行的状态,才能恢复,所以就需要有个东西来记录这个东西,就可以引出进程的概念了. 进程就是一个程序在一个数据集上的一次动态执行过程.进程由程序,数据集,进程控制块三部分组成.程序用来描述进程哪些功能以及如何完成:数据集是程序执行过程中所使用的资源:进程控制

9 异常处理 操作系统 进程线程 队列+生产消费者模型 进程同步 回调函数

异常处理 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常的种类: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError 无法引入模块或包:基本上是路径问题或名称错误 IndentationError 语法错误(的子类) :代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访

操作系统:进程/线程同步的方式和机制,进程间通信

一.进程/线程间同步机制. 临界区.互斥区.事件.信号量四种方式临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问.在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占.2.互斥量:采用互斥对象机

进程/线程

进程/线程控制: 创建                  退出                      等待 多进程               fork()         exit()           wait() 多线程      pthread_create    pthread_exit()        pthread_join() 线程的同步与互斥: 线程的互斥:  互斥锁 初始化互斥锁 int pthread_mutex_init(pthread_mutex_t *mute

java 进程/线程

进程 OS并发的一个任务 CPU分时间片交替执行 宏观并行 微观串行 线程:在一个进程中并发的一个顺序执行流程 线程的组成: 1.数据 堆空间共享 栈空间独立 2.CPU 3.代码 Thread 线程对象 继承Thread类型 覆盖run方法 直接创建Thread对象 实现Runnable接口 实现run方法 先创建Runnable对象,再创建Thread对象 多线程共同访问同一个对象(临界资源),如果破坏了不可分割的操作(原子操作),就会发生数据不一致的情况 synchronized 同步 s