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"