2016-08-10 6 views
1

初めてpthreadを使用する。スレッドを拡張し、いつものように別のスレッドから呼び出すクラスを作成しました。pthreads待機中のスレッド関数が移動する前に終了する

<?php 
class TestThread extends Thread 
{ 
    // 
    function __construct($parameters) { 
     $this->reverse = $parameters; 
    } 

    public function run() { 
     try { 
      sleep(20); 
      // Connecting to mysql database 
      $cn = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME); 
      INSERT INTO DEVICE_SESSION_ADDRESS (X, Y, Z) 
       VALUES (1,2,3) 
     } catch (Exception $ex) { 
      //do stuffs 
     } 
    }  
} 
?> 

そして、私はREST APIのメソッドからこの関数を呼び出します:ここ

は私のコードがある

function test ($response) { 
    require_once 'TestThread.php'; 
    $rev = new TestThread($response); 
    $rev->start(); 
} 

のREST APIをテストするために、ポストマンを使用して、コールをリリースする前に20秒間待機します。 この関数は機能し、データベースに挿入します。

私はそれを解決し、私のクラスTestThreadを非同期に呼び出すために何ができますか?事実のpthreads

+0

あなたが何を求めているかわかりません –

+0

$ rev-> start();ランニング()で私の睡眠を待っています。それは非同期ではありませんか? – GIJOW

+0

スリープを使用してスレッドの実行を停止しましたか? – GIJOW

答えて

1

は完璧に動作し、私はこの問題は、これらの理由の1持って確信しています:

  1. pthreadsがインストールされていません。 pthreadsセクションのphpinfo()を確認してください。
  2. pthreadsにはApacheのリクエストの中で電話をします。この場合、pthreadsは期待どおりに動作しません。この注記を参照してください。https://github.com/krakjoe/pthreadsSAPIサポートpthreadsはCLIとしてのみ使用できます。

両方の点が解決されていることを確認してから動作します。

+0

多分CLIに関する私の理解です。インストールされ、phpinfo()に表示されます。私の必要性は:私はいくつかのデバイス(IOT)からデータを受け取るメソッドで1つのAPI休息している。その後、これらの情報を分析し、場合によっては通知(電子メール、SMSなど)を送信する必要があります。このタスクは、火災と忘れている可能性があり、私は別のスレッドでこれらの関数の呼び出しを入れようとしているが、残りのAPIからの同じ呼び出し。 – GIJOW

+0

@GIJOWどのようにあなたのスクリプトを呼び出しますか?ブラウザや 'php script.php'のコマンドラインで? –

+0

コマンドラインではなくWebサービスメソッド – GIJOW

関連する問題