/* perform the operations for a frame: * - check to see if the connections are still alive (checkAlive) * - this will emit connectionsChanged if there is a any change in the connection status * - grab a text stream of the current model data ( stream << *subjectList ) * - put the text stream on the wire s->write(...) */ void MyServer::process() { stopProfile("Other"); working = true; startProfile("checkAlive"); int alive = checkAlive(); stopProfile("checkAlive"); if(alive > 0) { startProfile("Serve"); count++; QString buffer; QTextStream stream(&buffer); // The following operation is threadsafe. startProfile("Fetch"); subjectList->read(stream, true); stopProfile("Fetch"); startProfile("Wait"); listMutex.lock(); stopProfile("Wait"); // for each connection for(QList<ServerConnection *>::iterator i = connections.begin(); i != connections.end(); i++) { QTcpSocket *s = (*i)->socket; if(s->state() != QAbstractSocket::ConnectedState) continue; QString d = QString("%1\nEND\r\n").arg(buffer); startProfile("Write"); int written = s->write(d.toUtf8()); stopProfile("Write"); if(written == -1) { emit outMessage(QString(" Error writing to %1").arg(s->peerAddress().toString())); } else { s->flush(); } } listMutex.unlock(); stopProfile("Serve"); } working = false; startProfile("Other"); }
int CAPerfCfg::readSampleData() { // read the contents from mmap buffers // wait for the poll event // if profiling is done, // stop the profile for (; ;) { readMmapBuffers(); if (m_profileCompleted) { break; } int ret = poll(m_samplingPollFds, m_pollFds, -1); if (m_profileCompleted) { // FIXME: stop only if the profile is still running stopProfile(); } } }