2017-07-07 83 views
1

我已經在我的xampp中添加了pthread,並且在沒有yii框架的情況下工作正常,而且在yii框架中也通過yii模型,yii函數和擴展包含了擴展。 yiimailer不在這個類中工作,echo Yii :: app() - > basePath;也沒有工作yii 1.x擴展組件後,線程yii模型不起作用

我的組件類

class SendEmailThreads extends Thread{ 
    private $sendTo; 
    private $subject; 
    private $bodyText; 
    public function __construct($sendTo, $subject, $bodyText){ 
     $this->sendTo = $sendTo; 
     $this->subject = $subject; 
     $this->bodyText = $bodyText; 
    } 
    function run(){ 
     echo Yii::app()->basePath; 
     sleep(1); 


    } 
} 

使用這裏

public function actionBulkEmail(){  

for($i=0;$i<3;$i++){ 

    $pool[] = new SendEmailThreads('[email protected]','test bulk','test by fraz'); 
} 

foreach($pool as $worker){ 
    $worker->start(); 
} 

foreach($pool as $worker){ 
    $worker->join(); 
} 

}

+0

我已經添加了pthreads在我的xampp中,沒有yii框架,並且在yii框架中工作正常,但在yii模型中,yii的功能和包含擴展例如。 yiimailer不在這個類中工作,echo Yii :: app() - > basePath;也沒有工作 –

+0

我是通過調用瀏覽器的行動 錯誤是 注意:試圖讓非對象的屬性在C:\ XAMPP \ htdocs中\ cbtTeamProject \保護\分量\ SendEmailThreads.php上線20 - 3倍 由於回聲Yii :: app() - > basePath; –

回答

0

的問題是,並行線程不復制靜態成員是對象(有例外ThreadedClosure對象)。這意味着在嘗試通過Yii::app()獲取單個實例時將返回新線程內部的null。 ,因爲我以前從未使用過的Yii其中,我沒有其適用性的想法 - -

唯一的,我能想到的這個解決辦法是建立每個線程一個新的單一實例

雖然說到線程化,但是全球狀態應該被認爲是一面紅旗。因此,如果應用程序或框架大量使用它(現在大多數PHP框架都如此),那麼線程化並不是一個真正可行的選擇。