zoukankan      html  css  js  c++  java
  • perl中创建多进程

    本次项目中为了提高软件的运行效率,需要对pptx文件进行异步解压,通过运行发现Windows下多进程执行异常(调用fork函数创建子进程), 调用exe执行奔溃。其他非Windows平台好像没有这个问题。

    解决方法:

    在Windows下可以使用Win32::Process模块创建子进程,进行异步调用。

    process模块API函数列表:

    • 创建进程对象
      Create($Obj, $AppName, $CommandLine, $Inherit, $CreateFlags, $InitialDir);

    • 获取进程退出代码
      $Obj->GetExitCode($ExitCode);

    • 获得进程优先级类
      $Obj->GetPriorityClass($Class);

    • 获得进程优先级类
      $ProcessObj->GetProcessID();

    • 使用退出代码撤销进程
      $Obj->Kill($ExitCode);

    • 恢复挂起的进程
      $Obj->Resume();

    • 设置进程优先级掩码(NT)
      $Obj->SetPriorityClass($Class);

    • 挂起进程
      $Obj->Suspend();

    • 等待进程执行完毕
      $Obj->wait($Timeout);

    核心代码:

    use Win32::Process;
    use Win32;
    
    sub ErrorReport{
      print Win32::FormatMessage( Win32::GetLastError());
    }
    
    #创建新的进程
    #第一个参数$ProcessObj是进程对象容器,其后的参数包括应用程序的全路径、命令行参数和必需标志位。
    #若Create最后一个参数不是当前目录,则这个目录必须先创建,否则创建进程失败。
    Win32::Process::Create($ProcessObj,
    "C://windows//xxxx.exe", "xxxx cmdlines_args", 0,
    NORMAL_PRIORITY_CLASS, ".") || die ErrorReport();
    
    print "Notepad has started/n";
    print "The exit code is:",$ProcessObj->GetExitCode($ExitCode),"/n";

    其他方法:

    在Win32系统上,读者也可以像在UNIX系统上一样使用system函数、exec函数和反引号、start命令。 《》Windows和UNIX都使用system函数启动操作系统命令。system负责执行程序,并在程序完成之前不返回。如果将Windows start命令作为参数提供给Perl的system函数,便会运行新的应用程序,同时脚本仍将继续执行。

    示例代码:

    #Perl的system函数启动新的进程。通过使用Win32 start命令,可以启动新的进程。
    #与此同时,Perl脚本还将继续运行,而不是等待新进程执行完毕。如果进程启动成功,system函数将返回0。
    $return_value = system ("start /Program Files/Netscape/Communicator/Program/netscape.exe");
    
    print "Program continues; Netscape is running./n";
    #打印system函数的返回值。
    print "The return_value from system is $return_value./n";
    
    (Output)
    Program continues; Netscape is running.
    The return_value from system is 0.

    参考资料: http://blog.csdn.net/lhy2199/article/details/5462313

  • 相关阅读:
    VBA 如何检测一个中文字符串是否包含在另一个字符串中
    RFC2119 规范内容
    Android 解读Event和Main Log
    为知笔记发布博客地址
    理解 Android Build 系统
    皮肤病
    关于Android中50M+的文本入库处理细节
    at java.lang.AbstractStringBuilder.toString
    java.lang.AbstractStringBuilder.enlargeBuffer
    关于手机定位轨迹的算法逻辑
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468183.html
Copyright © 2011-2022 走看看