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

问题描述 投票:0回答:1

我试图找到一种方法来忽略代码的某一部分内的模块,以便我可以使用线程模块与非线程安全模块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
perl
1个回答
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]

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

© www.soinside.com 2019 - 2024. All rights reserved.