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"