zoukankan      html  css  js  c++  java
  • windows中子进程和线程的区别

    当你设计一个应用程序时,你可能想使用一些需要长时间运行的代码,而又不中继当前正在进行的工作。一个方法是使用线程,将这个工作交由一个线程去执行,如果这些代码在运行过程中发生了错误,它可能会影响所在进程空间的所有线程。第二个方法是建立一个子进程,由这个子进程完成所需工作,这样子进程代码的错误不会影响到父进程的执行。

    子进程与父进程之间可以通过动态数据交换(DDE)、OLE、管道、邮件槽等进行通信,使用内存映射文件是最便利的方法之一。

    当前子进程终止后,子进程句柄变为有信号,父进程可使用 WaitForSingleObject 来等待子进程退出,这样父进程就可使用 GetExitCodeProcess 来获得子进程的退出码。

    运行分离的子进程

    当父进程创建一个子进程后,父进程并不打算与子进程进程通信,父进程存续期间也不需要子进程必须完成它的工作,这种情况叫做“分离的子进程”。Windows Explore 创建的子进程就是这种情况。

    父进程在创建它的一个子进程后就立即调用 CloseHandle 来关闭返回的子进程的进程句柄和主线程句柄。

    还有:

    1. Windows中子进程和父进程之间是相互独立的。父进程中的资源不能直接被子进程所继承,貌似可以得到父进程的句柄。(Linux子进程是父进程的copy,资源共享,有点相当于windows中线程的意思)

    2. 主线程和各子线程之间可访问同一块内存空间,资源共享。他们之前的通信可以通过事件才解决

    3. 同一机器上的进程通信可以共享内存(剪切板),匿名管道(仅限于父子进程之间);不同机器可通过命名管道来实现。

    有关进程之间的通信:(同步和互斥是两个基本原则)

    其中同步是指一个线程需要另一个线程的状态来执行相应的操作;互斥值对共享资源的访问。

    线程间通信常用的三种方法:

    1.全局变量

    进程中的线程间内存共享,这是比较常用的通信方式和交互方式。
    注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。

    2.Message消息机制
    常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage,
    PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。


    3.CEvent对象
    CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。

    其中部分内容参考:http://www.cnblogs.com/Fly-pig/archive/2011/01/19/1939607.html

  • 相关阅读:
    线性代数之行列式的C#研究实现
    政府部门域名系统杂谈
    C#实现在foreach中删除集合中的元素
    RestServer 2.0 正式版发布
    常见的几种开源协议
    PostgreSQL学习手册(常用数据类型)
    一个很简单的淘宝优惠券搜索助手 大家看看有没有用吧
    做了一个淘宝内部优惠券分享平台支持微信公众号以及网站
    二十三种设计模式之原型模式的C#实现
    arcgis,mapinfo(mapxtreme),openlayers专业GIS系统开发
  • 原文地址:https://www.cnblogs.com/leon032/p/2217424.html
Copyright © 2011-2022 走看看