<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 13, 2015 at 5:39 PM, Daniel Pocock <span dir="ltr"><<a href="mailto:daniel@pocock.pro" target="_blank">daniel@pocock.pro</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><br>
<br>
On 13/10/15 22:34, Gustavo Boiko wrote:<br>
> Hi<br>
><br>
> On Tue, Oct 13, 2015 at 5:18 PM, Daniel Pocock <<a href="mailto:daniel@pocock.pro">daniel@pocock.pro</a><br>
</span><span class="">> <mailto:<a href="mailto:daniel@pocock.pro">daniel@pocock.pro</a>>> wrote:<br>
><br>
><br>
><br>
><br>
>     If a connection manager uses some library that creates its own threads<br>
>     (it is not a Qt based library either), are there any constraints on how<br>
>     these threads interact with the TelepathyQt API?<br>
><br>
>     For example, if the connection is completed in another thread, is it<br>
>     safe to call setStatus() from that thread?<br>
><br>
><br>
> It is probably not safe to call that from a different thread. If<br>
> setStatus() was a Qt slot, you could use QMetaObject::invokeMethod()<br>
> with Qt::QueuedConnection directly, but that's not the case. So, what<br>
> you can do is to define a slot to proxy the request and use<br>
> QMetaObject::invokeMethod() to call that slot.<br>
><br>
><br>
<br>
<br>
</span>Thanks for the feedback - could you suggest any example of this in<br>
another connection manager or similar code that I can look at?<br></blockquote><div><br></div><div>I don't recall seeing another CM with that, but it would be something like this:</div><div><br></div><div>class MyConnection : public Tp::BaseConnection</div><div>{</div><div>...</div><div>public Q_SLOTS:</div><div>    void setStatusSlot(uint newStatus, uint reason) {</div><div>        setStatus(newStatus, reason);</div><div>    }</div><div>}</div><div><br></div><div>and then, in the other thread you would call:</div><div>QMetaObject::invokeMethod(myConnectionObject, "setStatusSlot", Qt::QueuedConnection, Q_ARG(uint, status), Q_ARG(uint, reason));</div><div><br></div><div>That should be more or less what you need to do in your CM.</div><div><br></div><div>Cheers</div><div><br></div><div>Boiko</div></div><br></div></div>