新規コンソール
スレッドとコンソールという前回の日記にて、スレッドで複数バッチ処理を起動すると、
コンソールへの出力が混ざってしまって……。
という話をしていましたが、あっさり解決したので、そのことに関して。
単純にコマンド「start」を使う。それだけでした。
startは、新規コンソールにてコマンドを実行するコマンドです。
/wait オプションにて、処理終了まで呼び出し側に処理が戻らないので、それも利用します。
use threads; use Thread::Queue; $thread_queue = Thread::Queue->new(); $thread_queue->enqueue(1); $thread_queue->enqueue(2); $thread_queue->enqueue(3); $thread_queue->enqueue(4); my $thd1 = threads->create(\&proc, "One"); my $thd2 = threads->create(\&proc, "Two"); $thd1->join(); $thd2->join(); sub proc { while(0 < $thread_queue->pending) { if( my $data = $thread_queue->dequeue ) { if( my $pid = fork() ) { threads->yield(); wait(); } else { exec 'start "Title" /wait wait.bat 2'; } } } }
こんな感じで、呼びだすといい感じになってくれました。
コマンドを未だにちゃんと把握しきれていないのは勿体無いな、と思いました。
ちゃんと勉強しないとダメですね。