dcop
dcop_deadlock_test.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <dcop_deadlock_test.h>
00026 #include <dcopref.h>
00027 #include <qtimer.h>
00028 #include <sys/time.h>
00029 #include <sys/types.h>
00030 #include <unistd.h>
00031 #include <stdlib.h>
00032
00033 MyDCOPObject::MyDCOPObject(const QCString &name, const QCString &remoteName)
00034 : QObject(0, name), DCOPObject(name), m_remoteName(remoteName)
00035 {
00036 connect(&m_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
00037 }
00038
00039 bool MyDCOPObject::process(const QCString &fun, const QByteArray &data,
00040 QCString& replyType, QByteArray &replyData)
00041 {
00042 if (fun == "function(QCString)") {
00043 QDataStream args( data, IO_ReadOnly );
00044 args >> m_remoteName;
00045
00046 struct timeval tv;
00047 gettimeofday(&tv, 0);
00048 qWarning("%s: function('%s') %d:%06d", name(), m_remoteName.data(), tv.tv_sec % 100, tv.tv_usec);
00049
00050 replyType = "QString";
00051 QDataStream reply( replyData, IO_WriteOnly );
00052 reply << QString("Hey");
00053 m_timer.start(1000, true);
00054 return true;
00055 }
00056 return DCOPObject::process(fun, data, replyType, replyData);
00057 }
00058
00059 void MyDCOPObject::slotTimeout()
00060 {
00061 struct timeval tv;
00062 gettimeofday(&tv, 0);
00063 qWarning("%s: slotTimeout() %d:%06d", name(), tv.tv_sec % 100, tv.tv_usec);
00064
00065 m_timer.start(1000, true);
00066 QString result;
00067 DCOPRef(m_remoteName, m_remoteName).call("function", QCString(name())).get(result);
00068 gettimeofday(&tv, 0);
00069 qWarning("%s: Got result '%s' %d:%06d", name(), result.latin1(), tv.tv_sec % 100, tv.tv_usec);
00070 }
00071
00072 int main(int argc, char **argv)
00073 {
00074 QCString myName = KApplication::dcopClient()->registerAs("testdcop", false);
00075 KApplication app(argc, argv, "testdcop");
00076
00077 qWarning("%d:I am '%s'", getpid(), app.dcopClient()->appId().data());
00078
00079 if (myName == "testdcop")
00080 {
00081 system("./dcop_deadlock_test testdcop&");
00082 }
00083
00084 QCString remoteApp;
00085 if (argc == 2)
00086 {
00087 remoteApp = argv[1];
00088 }
00089 MyDCOPObject myObject(app.dcopClient()->appId(), remoteApp);
00090
00091 if (!remoteApp.isEmpty())
00092 myObject.slotTimeout();
00093 app.exec();
00094 }
00095
00096 #include "dcop_deadlock_test.moc"