有没有办法忽略perl中的非线程安全模块?

时间:2017-12-19 17:55:36

标签: perl

我试图找到一种方法来忽略某段代码中的模块,以便我可以将线程模块与非线程安全模块Win32 :: OLE一起使用。

use strict;
use warnings;
use Win32::OLE;

#Do some OLE stuff

#unimport Win32::OLE
use threads;

my $exec_command = threads->create(sub{});
$exec_command->join();
#reimport Win32::OLE

1 个答案:

答案 0 :(得分:1)

您不能在主线程上使用Win32::OLE,除非您先创建所有其他线程。但是,您可以在子线程中使用该模块。请注意require而不是use

my $ole_thread = threads->create(sub {
    require Win32::OLE;
    # do OLE stuff
});
my $result = $ole_thread->join();

[引用http://www.perlmonks.org/?node_id=595491]

这种方法可能适用于非线程安全的其他模块。但是你应该谨慎使用来自单个非主线程的模块。