我正在嘗試開發一種具有多線程功能的軟件。 在Linux上,腳本工作正常,我使用的模塊是'叉'。 換句話說,在查詢數據庫和類似的東西時,線程之間沒有共享處理程序的問題。 一旦我試圖在Windows上運行腳本(草莓Perl),當我嘗試安裝分支時,它說「叉模塊」不支持當前版本的操作系統(64位)。 移過來,我決定使用''線程'',但是我得到了以下錯誤,幾乎肯定與線程之間的共享處理程序相關聯。Perl多線程:跨平臺腳本中的''叉''和''線程''
'' 線程1異常終止:DBD :: SQLite :: db準備失敗:句柄2由線程擁有d97fe8不是當前線程3a01058(句柄不能在線程之間共享,並且您的驅動程序可能需要CLONE方法添加)在file.pl行180,第1行。 ''
如何解決上述問題,並使腳本可以在Windows上運行Strawberry Perl?
看來你需要編寫你的數據庫的自己使用'fork'而不是線程的處理,因爲'forks'模塊的作品。數據庫告訴你,你不能在線程之間共享句柄,所以你需要使用流程來解決這個問題。 –
爲什麼使用_forks_模塊,而不是用內置的'fork'編寫自己的東西? _forks_的文檔說這是您已經擁有_threads_的替代品,但不再需要它們。 [但它不能在Windows上運行](http://matrix.cpantesters.org/?dist=forks+0.36)。沒有辦法解決這個問題。 _threads_只是壞了。你需要使用適當的'fork'來重建自己的實現。你是怎麼想出_forks_模塊的?我已經做了超過10年的Perl,並且在此之前我從未聽說過它。 – simbabque
這是一個相對較新的事物,由'線索不鼓勵'引發。國際海事組織使用它的理由並不多。 – Sobrique