• 6744阅读
  • 3回复

关于QDbus的问题 [复制链接]

上一主题 下一主题
离线danny1987
 
只看楼主 倒序阅读 楼主  发表于: 2010-12-13
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
关键词: 103
首先,我使用QDbusConnection::sessionbus().registerService("xxx"),和QDbusConnection::sessionbus().registerObject("xxx",obj)
在dbus上注册了一个服务和object
接下来在另外一个程序中使用indicatorIface = new QDBusInterface('servicename','path',interface',QDbusConnection::sessionbus())产生一个动态的interface
但是我用strace及加一些打印语句追踪发现new QDbusinterface这条语句的执行花了很长的时间,并且中间内部调用了poll(18,pollin)和readcv之类的函数,最后
poll到timeout了,默认的timeout时间是25s,18应该是dbus的什么文件之类的东西。不知道有了解qdbus的人知道是什么原因吗,或者减少时间的方法?谢谢
离线numen

只看该作者 1楼 发表于: 2010-12-13
这个应该与qt没关系吧,是被dbus本身阻塞了,换一台机器试试吧
欢迎访问我的blog:
http://www.cnblogs.com/baizx
离线danny1987
只看该作者 2楼 发表于: 2010-12-14
回 1楼(numen) 的帖子
调试的信息是这样的:小数点前的是秒数,42s,最后面<>的数字是执行中间函数的时间。可以看到最后两句就直接由42s等到了66s。可能是dbus阻塞了,但是有什么解决办法呢?dbus的阻塞和硬件(机器)有关系吗?
1291420842  clock_gettime(CLOCK_MONOTONIC, {45, 453361810}) = 0 <0.000216>
1291420842.568588 write(2, "void MInputMethodBasePrivate::_q"..., 112) = 112 <0.000158>
1291420842.569483 write(2, "void MInputMethodBasePrivate::co"..., 56) = 56 <0.000150>
1291420842.570865 clock_gettime(CLOCK_MONOTONIC, {45, 458383930}) = 0 <0.000099>
1291420842.571788 sendmsg(18, {msg_name(0)=NULL, msg_iov(2)=[{"l\1\0\1/\0\0\0\16\0\0\0\177\0\0\0\1\1o\0\25\0\0\0/org/fre"..., 144}, {"*\0\0\0com.meego.core.MInputMethodS"..., 47}], msg_controllen=0, msg_flags=0}, MSG_NOSIGNAL) = 191 <0.003162>
1291420842.576064 clock_gettime(CLOCK_MONOTONIC, {45, 463556490}) = 0 <0.000097>
1291420842.576832 poll([{fd=18, events=POLLIN}], 1, 25000) = 1 ([{fd=18, revents=POLLIN}]) <0.000114>
1291420842.577737 recvmsg(18, {msg_name(0)=NULL, msg_iov(1)=[{"l\2\1\1\t\0\0\0\22\0\0\0=\0\0\0\6\1s\0\5\0\0\0:1.25\0\0\0"..., 2048}], msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 89 <0.000215>
1291420842.579082 recvmsg(18, 0xbfbfaae8, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable) <0.000113>
1291420842.580128 clock_gettime(CLOCK_MONOTONIC, {45, 467646050}) = 0 <0.000100>
1291420842.580824 sendmsg(18, {msg_name(0)=NULL, msg_iov(2)=[{"l\1\0\1\0\0\0\0\17\0\0\0\243\0\0\0\1\1o\0\33\0\0\0/inputme"..., 184}, {"", 0}], msg_controllen=0, msg_flags=0}, MSG_NOSIGNAL) = 184 <0.002777>
1291420842.584429 clock_gettime(CLOCK_MONOTONIC, {45, 471920889}) = 0 <0.000095>
1291420842.584990 poll([{fd=18, events=POLLIN}], 1, 25000) = 1 ([{fd=18, revents=POLLIN}]) <24.259375>
1291420866.845102 recvmsg(18, {msg_name(0)=NULL, msg_iov(1)=[{"l\2\1\1\313\4\0\0\25\0\0\0-\0\0\0\6\1s\0\5\0\0\0:1.25\0\0\0"..., 2048}], msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 1291 <0.000157>
1291420866.846454 recvmsg(18, 0xbfbfac08, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable) <0.000193>

[ 此帖被danny1987在2010-12-14 14:48重新编辑 ]
离线danny1987
只看该作者 3楼 发表于: 2010-12-14
或者说怎么可以测试dbus为什么阻塞了哈,谢谢
[ 此帖被danny1987在2010-12-14 14:48重新编辑 ]
快速回复
限100 字节
 
上一个 下一个