2

Windows 7 と php 5 を使用しています。

proc_open によるプロセスの実行に問題があり、タイムアウトを確認します。stream_select を使用して、次のコードでタイムアウトを確認しました。

<?php
$descriptorspec = array(
0 => array("file", $infile, "r"),  // stdin is a pipe that the child will read from
1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a file to write to
);
$prog = @proc_open ($objname.".exe", $descriptorspec, $pipes, "$DOCUMENT_ROOT/judge/temp", null, null);
if(!is_resource($prog)) ErrorResult("","proc_open err");

$streams = array($pipes[1]);
$start = microtime(true);
$ret = stream_select($streams, $a = null,$a = null, 1);
$stop = microtime(true);
?>

これは、テストに使用した C++ コードです。

#include<windows.h>

int main(){
    Sleep(2000);
    return 0;
}

そのコードでは、出力はまったくありませんが、stream_select は 1 秒待たずに 1 を返します。

どうすればこれを修正できますか?

4

1 に答える 1

0

なんらかの理由で C++ 実行可能ファイルが実際には実行されない可能性があると思われますが、終了コードはcmd.exe.

  • C++ 実行可能ファイルが実際に実行されることを証明します。を呼び出す前に、C++ から PHP にデータを渡そうとしstream_selectます。

  • cmd.exe邪魔にならないように:

    $opts = array('suppress_errors' => false, 'bypass_shell' => true);

    $prog = proc_open ($objname.".exe", $descriptorspec, $pipes, "$DOCUMENT_ROOT/judge/temp", null, null, $opts);

于 2012-07-04T14:15:47.053 に答える