2017-04-25 2 views
-1

MQTTとの接続はGLOBAL_QUEUE_PRIORITY_HIGHで行います。これは正しいです?私のUIは応答するのに時間がかかるからです。GLOBAL_QUEUE_PRIORITY_DEFAULTはUIレスポンスを停止します

dispatch_async(dispatch_get_global_queue(GLOBAL_QUEUE_PRIORITY_HIGH,0),{ 
    guard self.session != nil else { 
     fatalError("Could not create MQTTSession") 
    } 


    let transportSocket:MQTTCFSocketTransport = MQTTCFSocketTransport() 
    transportSocket.host = MQTT_HOST; 
    transportSocket.port = MQTT_PORT; 


    self.session!.transport = transportSocket 


    self.session!.delegate = self 
    self.session!.userName = token 
    self.session!.password = userId 
    self.session!.keepAliveInterval = 300 
    self.session!.cleanSessionFlag = false 
    self.connect() 
}) 

メインスレッドとは別にしたい。それが私がやった理由です。これが正しいかどうか教えてください。

+0

私は非常に深いMQTTFrameworkにいないけど、私はそのテストクラスで見たことはある:MQTTSessionは、同期または非同期に実行されていることであるあなたは非同期にそれを設定することができます。私はそれが重要ではないと確信しています。メインキューで実行されていないのであれば、それは重要です。https://github.com/ckrey/MQTT-Client-Framework/blob/master/MQTTClient/MQTTClient/MQTTSession.m Line 45 @property(nonatomic)BOOL synchronousConnect; – Lepidopteron

答えて

0

メインメソッドではなく、GLOBAL_QUEUE_PRIORITY_HIGHと書きます。

dispatch_async(dispatch_get_global_queue(GLOBAL_QUEUE_PRIORITY_HIGH,0),{ 
// Here you can call methods like getting data from database or from server. 

//注:一部の回は、それはあなたがアプリですクラッシュすることがあり、任意のUIを更新しようとしないでください。 dispatch_async(dispatch_get_main_queue()、{

 // Here you can write for update UI. 

    }) 
}) 
+0

ここでは、mqttサーバに接続するだけで、ここではuiを更新しません。 – John

関連する問題