[Telepathy] TelepathyQt threading
Gustavo Boiko
gustavo.boiko at canonical.com
Tue Oct 13 13:51:21 PDT 2015
On Tue, Oct 13, 2015 at 5:39 PM, Daniel Pocock <daniel at pocock.pro> wrote:
>
>
> On 13/10/15 22:34, Gustavo Boiko wrote:
> > Hi
> >
> > On Tue, Oct 13, 2015 at 5:18 PM, Daniel Pocock <daniel at pocock.pro
> > <mailto:daniel at pocock.pro>> wrote:
> >
> >
> >
> >
> > If a connection manager uses some library that creates its own
> threads
> > (it is not a Qt based library either), are there any constraints on
> how
> > these threads interact with the TelepathyQt API?
> >
> > For example, if the connection is completed in another thread, is it
> > safe to call setStatus() from that thread?
> >
> >
> > It is probably not safe to call that from a different thread. If
> > setStatus() was a Qt slot, you could use QMetaObject::invokeMethod()
> > with Qt::QueuedConnection directly, but that's not the case. So, what
> > you can do is to define a slot to proxy the request and use
> > QMetaObject::invokeMethod() to call that slot.
> >
> >
>
>
> Thanks for the feedback - could you suggest any example of this in
> another connection manager or similar code that I can look at?
>
I don't recall seeing another CM with that, but it would be something like
this:
class MyConnection : public Tp::BaseConnection
{
...
public Q_SLOTS:
void setStatusSlot(uint newStatus, uint reason) {
setStatus(newStatus, reason);
}
}
and then, in the other thread you would call:
QMetaObject::invokeMethod(myConnectionObject, "setStatusSlot",
Qt::QueuedConnection, Q_ARG(uint, status), Q_ARG(uint, reason));
That should be more or less what you need to do in your CM.
Cheers
Boiko
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/telepathy/attachments/20151013/36856dc6/attachment.html>
More information about the telepathy
mailing list