i.e. using of QByteArray instead of queues of char* wouldn't decrease app's perfomance?
and would following code be correct to your mind?
void TClient::readyReadSlot()
{
if ( !m_HeaderProcessed )
{
read( reinterpret_cast< char * >( &m_PackageHeader ), sizeof( m_PackageHeader ) );
m_PackageHeaderProcessed = true;
}
int bytesToRead = bytesAvailable();
if ( bytesToRead >= m_PackageHeader.MessageSize )
{
QByteArray message
= read
( m_PackageHeader.
MessageSize );
m_PackageHeaderProcessed = false;
emit dataReceived( message );
}
else
// read remaining data
emit readyRead();
}
void TClient::readyReadSlot()
{
if ( !m_HeaderProcessed )
{
read( reinterpret_cast< char * >( &m_PackageHeader ), sizeof( m_PackageHeader ) );
m_PackageHeaderProcessed = true;
}
int bytesToRead = bytesAvailable();
if ( bytesToRead >= m_PackageHeader.MessageSize )
{
QByteArray message = read( m_PackageHeader.MessageSize );
m_PackageHeaderProcessed = false;
emit dataReceived( message );
}
else
// read remaining data
emit readyRead();
}
To copy to clipboard, switch view to plain text mode
and returning to:
TClientThread::run()
{
TClient client;
// little mistake))
client.setSocketDescriptor( socketDescriptor );
// use client's functions via signals
connect( this, SIGNAL( someThreadSignals ), &client, SLOT( someThreadSlots() ) );
exec();
}
TClientThread::run()
{
TClient client;
// little mistake))
client.setSocketDescriptor( socketDescriptor );
// use client's functions via signals
connect( this, SIGNAL( someThreadSignals ), &client, SLOT( someThreadSlots() ) );
exec();
}
To copy to clipboard, switch view to plain text mode
i introduced signal TServer::clientDisconnected( TClient * ) because i need some information about disconnected client, for example, peerAddress & peerPort. this suggests me to use following code:
TClientThread::run()
{
m_Client = new TClient;
m_Client->setSocketDescriptor( socketDescriptor );
// use client's functions via signals
connect( this, SIGNAL( someThreadSignals ), m_Client, SLOT( someThreadSlots() ) );
exec();
}
TClientThread::run()
{
m_Client = new TClient;
m_Client->setSocketDescriptor( socketDescriptor );
// use client's functions via signals
connect( this, SIGNAL( someThreadSignals ), m_Client, SLOT( someThreadSlots() ) );
exec();
}
To copy to clipboard, switch view to plain text mode
but how can i finish thread correct now?
Bookmarks