スレッドを使用する簡単な例を次に示します。
use strict;
use warnings;
use threads;
sub threaded_task {
threads->create(sub {
my $thr_id = threads->self->tid;
print "Starting thread $thr_id\n";
sleep 2;
print "Ending thread $thr_id\n";
threads->detach(); #End thread.
});
}
while (1)
{
threaded_task();
sleep 1;
}
これにより、毎秒スレッドが作成されます。スレッド自体は2秒間続きます。
スレッドの詳細については、ドキュメントを参照してください。重要な考慮事項は、変数がスレッド間で共有されないことです。新しいスレッドを開始すると、すべての変数の複製コピーが作成されます。
共有変数が必要な場合は、を調べてthreads::shared
ください。
ただし、正しい設計は実際に何をしようとしているかによって異なることに注意してください。これはあなたの質問からは明らかではありません。
コードに関するその他のコメント:
use strict;
コードでベストプラクティスを使用できるように常に支援します。
- 字句変数を宣言する正しい方法は、ではあり
my $gg;
ませんlocal $gg;
。local
実際には字句変数を作成しません。ローカライズされた値をグローバル変数に与えます。頻繁に使用する必要はありません。
- サブルーチンにシステム関数と同じ名前を付けることは避けてください(例
print
)。これは紛らわしいです。
- サブルーチンを呼び出す前に使用することはお勧めしません
&
(あなたの場合、システム関数名との競合のために必要でしたが、私が言ったように、それは避けるべきです)。