2017-07-07 9 views
1

私はxamppにpthreadを追加しました.yiiフレームワークなしのythフレームワーク、yiiモデル、yii関数、 yiimailerはこのクラスでは動作しません。echo Yii :: app() - > basePath;また、ここでは yii 1.xは、スレッドyiiモデルが動作しないコンポーネントを拡張した後

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(); 
} 

を使用し私のコンポーネントクラス

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); 


    } 
} 

}

が動作していない

+0

yiiフレームワークなしで、yiiフレームワークでもyiiモデルでも、yii関数でも、拡張子が含まれていても、xamppにpthreadを追加しました。 yiimailerはこのクラスでは動作しません。echo Yii :: app() - > basePath;また、動作していません –

+0

私はブラウザ経由でアクションを呼び出しました エラーは です注意:C:\ xampp \ htdocs \ cbtTeamProject \ protected \ components \ SendEmailThreads.phpの行ではないオブジェクトのプロパティを取得しようとしています - エコーのためにYii :: app() - > basePath; –

答えて

0

問題はpthreadsのは、を除いて(オブジェクトである静的メンバをコピーしないということですThreadedおよびClosureオブジェクト)。つまり、Yii::app()で単一インスタンスをフェッチしようとすると、新しいスレッドの内部でnullが返されています。

これまで私がYiiを使ったことがないことを考えれば、私はその適合性を知らない唯一の回避策は、スレッドごとに新しいシングルトンインスタンスを作成することです。

本当に、グローバルな状態はスレッディングに関しては赤い旗であると考えるべきです。したがって、アプリケーションやフレームワークで多量の使用が行われた場合(現在のほとんどのPHPフレームワークと同様)、スレッド化は実用的な選択肢ではありません。

関連する問題