私は、スレッドとフォークモジュールをそれぞれ使って、WindowsとLinux用のPerlマルチスレッドソフトウェアを開発しています。 標準出力をシェルに向けるとすべてうまく動作しますが、スクリプトにTkモジュールを組み込んでGUIを作成すると、Windows版のアプリケーションだけがうまく動作します(実際はうまくいきませんが、出力は受け入れられます)。私がLinux上でForksモジュールとスクリプトを起動する簡単なボタンと一緒に実行しようとすると、何かが間違っていました。以下はPERL Tkとフォークのミスマッチモジュール
、あなたはそれに関連付けられたエラーメッセージを見つけることができます:
プロトタイプの不一致は、両方のTkとフォークのモジュールの中に埋め込まれた共通機能とリンクすることができ、正直なところ、私はどのように知りません***.button (1):
0 0x32bef88 IV f=00000001 undef(1)
SV = IV(0x32bef78) at 0x32bef88
REFCNT = 1
FLAGS =()
IV = 0
Prototype mismatch: sub CORE::GLOBAL::exit (;$) vs none at /usr/local/lib/perl5/site_perl/5.26.0/x86_64-linux/forks.pm line 1509.***
それを解決する。 私は 'Tk'関数の特定の 'フォーク'を含めるよう試みましたが、それを修正する方法はありません。
この件に関するお手伝いをお待ちしております。
'Tk'と' forks'モジュールをロードする方法と、プロセスをforkする方法を示す(最小限の)コードを提供してください。 –
Perl/TKはスレッドセーフではありません。同じ糸の中から常に物事を行う必要があります。しかし、Windowsのforkはスレッドを使ってエミュレートされます。 –
また、 "forkされたプロセスからexitを使うと、子プロセスと親プロセスの両方が終了します。デフォルトでTk :: exitがインポートされるので、代わりにforkしたプロセスでCORE :: exitを使うべきです。 – charlesbridge