Задача: Необходимо сделать поток, который будет управлять определенным количеством сокетов...что бы не было блокировки использую соединение
connectToHost() без
waitForConnected(), когда придет сигнал connected() от сокета, я выставляю флаг в классе сокета, что соединение установлено и работаю с сокетом на чтение\отправку
Проблема после вызова
connectToHost(), сокет проходит все состояние (hostlookup, connecting), но в состояние ConnectedState не приходит и сигнал connected() не приходит!?
НО если после функции
connectToHost() поставить
waitForConnected() - сигнал connected() тут как тут!?...пол дня ломал голову так ничего и не решил проблему...привожу пример кода
конструктор сокета (соединяю сигналы и слоты)
C++ (Qt)
CMyTcpSocket::CMyTcpSocket()
{
qRegisterMetaType<QAbstractSocket::SocketState>("QAbstractSocket::SocketState");
connect(this,SIGNAL(stateChanged(QAbstractSocket::SocketState)),
this,SLOT(slot_OnSocketChangeState(QAbstractSocket::SocketState)));
connect(this,SIGNAL(readyRead()), this, SLOT(slot_OnReadyRead()));
connect(this,SIGNAL(connected()), this, SLOT(slot_OnConnect()));
connect(this,SIGNAL(disconnected()), this, SLOT(slot_OnDisconnect()));
}
функция соединения
C++ (Qt)
CMyTcpSocket::Connect()
{
connectToHost("192.168.205.137",6346);
}
- Инициализация потока управления сокетами.
C++ (Qt)
bool CMyThread::Initialize()
{
CMyTcpSocket mysocket=new CMyTcpSocket;
mysocket->movetoThread(this);
}
- исполняемая функция потока run()
C++ (Qt)
void CMyThread::run()
{
while(m_mustStop)
{
// find our socket
....
....
....
mysocket->Connect();
}
}
после вызова Connect() сигнал
connected() в сокет не приходит - в этом основная проблема (а если добавить waitForConnected все работает!?).....помоЖите чем моЖите....заранее спасибо за комменты!!! P.s. Асинхронный режим работы сокетов не подойдет (уже пробовал - проц грузится под 100% при 1000 сокетах.)