展开

关键词

C# 进程间通讯

一、进程间通讯的方式 1)共享内存 包括:内存映射文件,共享内存DLL,剪切板。 2)命名管道及匿名管道 3)消息通讯 4)利用代理方法。例如SOCKET,配置文件,注册表方式。 等方式。 进程间通讯的方式有很多,常用的有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和匿名管道、发送消息等几种方法来直接完成,另外还可以通过socket口、配置文件和注册表等来间接实现进程间数据通讯任务 以上这几种方法各有优缺点,具体到在进程间进行大数据量数据的快速交换问题上,则可以排除使用配置文件和注册表的方法;另外,由于管道和socket套接字的使用需要有网卡的支持,因此也可以不予考虑。 二、发送消息实现进程间通讯前准备 下面的例子用到一个windows api 32函数 [DllImport("User32.dll", EntryPoint = "SendMessage")] private 三、发送消息实现进程间通讯具体步骤 1.新建windows应用程序 (1)打开VS2008,新建一个“windows 应用程序”,主窗口为Form1,项目名称:ProcessCommunication

54520

C# 获取进程退出代码

我需要写一个程序,让这个程序知道另一个程序是否正常退出,于是就需要获取这个进程的退出代码 在程序如果需要手动退出,可以设置当前的退出代码 static void Main(string[ { Environment.Exit(-100); } 这时的程序运行就退出,同时退出的代码就是 -100 这和 C 语言的在 main 函数返回值一样 在 C# 需要其他程序先拿到这个程序的进程,如果是在其他程序启动这个程序,那么通过 Process 就可以拿到 如我有两个程序,一个是控制台程序,这个控制台程序是 控制台.exe 还有一个 WPF 程序,通过 WPF ,如果不是在 WPF 启动控制台程序,也可以在进程退出之前使用下面代码拿到进程 var process = Process.GetProcessById(控制台进程); 如果在进程退出之后才尝试去获取进程就会出现下面代码 System.ArgumentException:“ID 为 xx 的进程当前未运行。”

7420
  • 广告
    关闭

    腾讯云服务器买赠活动

    腾讯云服务器买赠活动,低至72元1年,买就送,最长续3个月,买2核送4核、买4核送8核

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 获取进程退出代码

    我需要写一个程序,让这个程序知道另一个程序是否正常退出,于是就需要获取这个进程的退出代码 在程序如果需要手动退出,可以设置当前的退出代码 static void Main(string[ { Environment.Exit(-100); } 这时的程序运行就退出,同时退出的代码就是 -100 这和 C 语言的在 main 函数返回值一样 在 C# 需要其他程序先拿到这个程序的进程,如果是在其他程序启动这个程序,那么通过 Process 就可以拿到 如我有两个程序,一个是控制台程序,这个控制台程序是 控制台.exe 还有一个 WPF 程序,通过 WPF 通过这个方法就可以拿到启动的进程的返回值,如果不是在 WPF 启动控制台程序,也可以在进程退出之前使用下面代码拿到进程 var process = Process.GetProcessById(控制台进程 ); 如果在进程退出之后才尝试去获取进程就会出现下面代码 System.ArgumentException:“ID 为 xx 的进程当前未运行。”

    83420

    查看占用内存进程

    ps -e  -o "%C  : %p : %z : %a"|sort -k5 -nr|head -10 -e,显示出所有的进程 -o,格式化输出 CODE   NORMAL   HEADER

    41770

    c#如何启动干掉查找 进程

    查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 :  using System; using System.Diagnostics; using System.Windows.Forms                 Process.Start(target);             }                     } ///

    /// 列出所有可访问进程 p.ProcessName; this.lst1.Items.Add("名称:" + p.ProcessName + ",启动时间:" + p.StartTime.ToShortTimeString() + ",进程 p " + pid);                 }             }         } /// /// 运行DOS命令    /// DOS关闭进程命令 (ntsd -c q -p PID )PID为进程的ID    /// /// <param name="command"></param> /// <returns><

    460100

    C#学习笔记——启动其他进程

    方法一: 1 启动一个独立进程,需要用到的命名空间是:using System.Diagnostics; 进程类是 Process ,进程的相关参数信息类是 ProcessStartInfo 2 { for (int i = 0; i < 2; i++) { //并行: 多个同命实例进程一起执行 RunMutilInstanceProcess(i); //串行,一个进程启动结束后,运行下一个 // WaitSonProcess 方法三: internal Process processKeyBoard; processKeyBoard = Process.Start("osk.exe"); //osk.exe为系统的键盘程序的进程名称 查看进程名称可以通过右键该程序,查看所在文件夹,再查看属性

    23440

    GPU,具有Tensorflow的多进程

    需要与要启动的进程一样的内核(有时内核可以处理多个“线程”,因此这是最后关注的数字)。 将使用AWS的实例p3.8xlarge,提供32个vCores和4个V100显卡。 这个包允许启动进程并创建管道以与它们通信。以下是架构的拓扑: ? 多处理图 有32个工作进程和1个主进程。 工作进程只是在玩游戏来收集数据并将其发送到主进程,主进程将训练这些数据并将新网络保存在文件中。然后,工作人员收到加载新网络,加载并再次播放N个游戏的消息。 因此,需要从主进程启动32个进程,并在主进程和每个进程(即32个管道)之间创建一个管道。还需要在主进程内创建线程以异步侦听管道。 对于GPU分配,有32个进程,4个GPU,每个16GB内存。增加每个进程的内存可以提高运行模型的进程速度。

    84620

    python的多进程fork

    进程 多个进程分别修改程序中的全局变量,结果会是怎样的? 如:全局变量num初始值为0,多个进程分别对该变量进行加1,是否会产生叠加效果? ,互不影响 多次fork 在一个程序中,调用两次fork函数,会有多少个进程? = os.fork() if pid == 0: print(3) else: print(4) # 2 # 1 # 4 # 4 # 3 # 3 由此可知,fork两次后,共有6个进程 第一次fork后,有两个进程。 这两个进程在第二次fork时,又各自产生新的进程 如图所示: ? 多次fork 源码下载

    56830

    C#委托三(播委托)

    我们想要调用一个委托,但同时可以执行多个方法(自定义事件中最为常见),比如,一个工作文档生成之后,系统要将生成文档日志,而且还要被保存到数据库中,对于以上二个操作,如果只想调用一个委托,就可以顺序完成,那么使用播委托 如果调用播委托,就可以按顺序连续调用多个方法。为此,委托的签名就必须返回 void (否则,返回值应送到何处?) 实际上,如果编译器发现某个委托返回 void ,就会自动假定这是一个播委托。 播委托(MulticastDelegate)提供了一种类似于流水线式的钩子机制,只要加载到这条流水线上的委托,都会被顺序执行。 因为所有的委托都继承自MulticastDelegate,因此所的委托都具备播特性。

    33730

    C#播委托(Multicast Delegate)

    委托可以包含多个方法,这种委托称为播委托。如果调用播委托,就可以按顺序连续调用多个方法。为此,委托的签名必须返回void,否则就只能得到委托调用的最后一个方法的结果。 播委托可以使用运算符“+”和“+=”添加方法,也可以使用“-”和“-=”从委托中删除方法调用。

    1.2K50

    C#文件打包下载

    48030

    C#】给无窗口的进程发送消息

    那如果进程没窗口怎么办? 当程序中的所有Form都Hide后,访问该进程的MainWindowHandle会得到IntPtr.Zero,这就是无窗口进程。 由于这种进程的MainWindowHandle拿不到有效句柄,所以上面那些API是用不了的,只能另想办法。 但如果你的程序要像播放器杀软那样允许用户隐藏窗口的话,那还得继续折腾,此时问题变成【如何让无窗口的进程显示窗口】,我的思路是这样:既然目标进程没窗口,我没办法纯粹用外部手段操作到它的窗体,但因为程序是我自己写的 这实质上是一个进程间通信问题,所以其实任何进程通信手段都可以应用在本文的案例,走消息只是其中一种手段。当然对于本文案例,若您有更好的办法,恳请告知,先行谢过。 -文毕-

    93030

    c#进程之间对象传递方法

    起源 KV项目下载底层重构升级决定采用独立进程进行Media下载处理,以能做到模块复用之目的,因此涉及到了独立进程间的数据传递问题。 目前进程间数据传递,多用WM_COPYDATA、共享dll、内存映射、Remoting等方式。相对来说,WM_COPYDATA方式更为简便,网上更到处是其使用方法。 而且Marshal这个静态类,其内置多种方法,可以很方便实现字符串、结构体等数据在不同进程间传递。 那么,对象呢?如何传递? 2、序列化 想到了,Newtonsoft.Json.dll这个神器。 ChildApp.exe"); Process.Start(childPath, this.Handle.ToString()); } } 它的作用就是接收子进程传递回来的字串 其实就是用了WM_COPYDATA的字符串传递功能,加上Json的序列化、反序列化,而实现c#不同进程间的对象传递 4、效果图: ?

    18520

    C#操作系统进程的代码演示

    这段代码演示了如何根据进程名关闭进程和启动进程 private bool CloseProcess(string CloseProcessName) { try { //根据进程名称,获取该进程信息 Process[] MyProcessS = Process.GetProcessesByName } return true; } ///

    /// 创建进程

    14510

    C#进程调用FFmpeg操作音视频

    本篇文章主要讲解的是使用C#进程(Process)调用FFmpeg.exe进行视频合并,音频合并,音频与视频合并成视频这几个简单的音视频操作,还有些复杂的音视频操作后续有时间慢慢补上。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac等平台。 /github.com/YSGStudyHards/FFmpegAudioAndVideoMerge 下载FFmpeg.exe安装包 首先把下载下来的FFmpeg.exe放在你指定的目录文件夹中,方便C# 进程调用。 C#进程调用FFmpeg操作音视频 namespace FFmpegAudioAndVideoMerge { class Program { static void Main

    24400

    socket编程与利用进程进行并行连接

    bind (sock, (struct sockaddr *) &sockaddr, sizeof (sockaddr)) < 0) 9 ERR_EXIT ("Bind");   二:  利用进程进行并行 socket阻塞式连接:         客户端和makefile文件和上面一样,只是将socket的服务端,修改为调用进程来进行并发连接即可!

    40530

    C#多线程(4):进程同步Mutex类

    它还可用于进程间同步的同步基元。 Mutex 跟 lock 相似,但是 Mutex 支持多个进程。Mutex 大约比 lock 慢 20 倍。 Mutex 只要考虑实现进程间的同步,它会耗费比较多的资源,进程内请考虑 Monitor/lock。 在终端服务器会话中,两个互斥体的名称只是它们的前缀不同,它们都是对终端服务器会话中的所有进程都可见。 进程同步示例 这里我们实现一个这样的场景: 父进程 Parent 启动子进程 Children ,等待子进程 Children 执行完毕,子进程退出,父进程退出。 firstInstance) { // 等待子进程运行结束 Console.WriteLine("等待子进程运行结束

    29840

    WPF开发之C#中关闭进程的方式

    根据名称关闭 使用C#结束 private static void StopNginx() { Process[] processes = Process.GetProcessesByName( p.MainModule.FileName) { p.Kill(); p.Close(); } } } 注意 进程名称不要写成 nginx.exe,会找不到nginx进程。 本来我还尝试了用进程对象来结束,但是不行,因为Nginx启动会产生多个进程,单独结束掉一个是不行的! ID netstat -ano|findstr ":10077 " 比如进程ID为16212 查看进程对应的进程名称 tasklist |findstr 16212 结束进程 taskkill /f /

    58421

    译 | 你到底有精通 C#

    文:Damir Arh 译:Edi Wang 即使是具有良好 C# 技能的开发人员有时候也会编写可能会出现意外行为的代码。 本文介绍了属于该类别的几个 C# 代码片段,并解释了令人惊讶的行为背后的原因。 Null 值 我们都知道,如果处理不当,空值(null)可能是危险的。 在重新启动进程 (或应用程序域) 之前,该类实际上无法使用。是的,即使静态构造函数引发异常的可能性很小,也是一个非常糟糕的想法。 派生类中的初始化顺序 对于派生类,初始化顺序更加复杂。

    21540

    CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发

    文章目录 区分 CPU && 多核CPU CPU缓存 并行 && 并发 CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发 之间的关系 Linux下查看CPU相关信息 希望开此篇能帮到你 区分 CPU && 多核CPU 最早意识到这两个概念可能不一样是在什么时候呢,不是在买电脑的时候哈,是在安装虚拟机的时候。 ---- CPU缓存 CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。 ---- CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发 之间的关系 1、进程的运行不仅仅需要CPU,还需要很多其他资源,如内存啊,显卡啊,GPS啊,磁盘啊等等,统称为程序的执行环境 要么咱手动多开几个进程,要么fork出子进程

    53240

    扫码关注腾讯云开发者

    领取腾讯云代金券