QTCPSocket同时定时器启动
QTCPSocket start by timer at the same time
我在应用程序中有同步(同时启动QTCPSocket)问题,我有10个套接字。我必须在相同的时间读取所有套接字的数据。此时此刻,我有一些东西:
///...///
if(!socket->waitForConnected(-1))
{
qDebug() << "Server not found";
emit serverNotFound();
}else if(socket->state()==QAbstractSocket::ConnectedState){
qDebug() << "Connected"
connect(timer, SIGNAL(timeout()),this,SLOT(connected()));
timer->start(1000);
}
}
接通信号:
void SocketsClass::connected()
{
sendRequest(socket, messageToServer);
}
问题是,当第一个套接字连接时,计时器开始为一个。
你可以改变你的方法。不要等待套接字连接。相反,检查插座是否连接在定时器激活的槽位上。在该槽中,您可以遍历所有套接字,并向每个套接字发送消息。
最后,你不应该使用Qt的waitForXxx
方法,它们会导致一个可怕的伪同步代码,非常容易出错,难以扩展和维护。请使用信号槽机制。
的例子:
SocketManager : public QObject {
Q_OBJECT
QTcpSocket m_sockets[10];
QTimer m_timer;
public:
SocketManager(QObject * parent = 0) : QObject(parent) {
... // connect all sockets here
m_timer.start(1000);
connect(&m_timer, &QTimer::timeout, [this]{
for (auto & socket : m_sockets)
if (socket.state() == QAbstractSocket::ConnectedState)
sendRequest(socket, messageToServer);
});
}
};
相关文章:
- Ardunio UNO解决了多个重叠的定时器循环
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- Arduino Nano:A4988 使用串行输入时通过定时器进行步进控制不稳定
- 没有信号处理程序的POSIX定时器的目的是什么?
- 在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
- 如何在Qt中修改QWebsocket定时器
- 将 GDB 或 LLDB 嵌入程序C++并从代码启动调试器
- C :从一定的时间戳启动计时器,然后将其增加
- C++Windows中的高分辨率定时器库
- 如何用单个信号处理程序解决这个多linux定时器的问题
- C#/.NET定时器和Win32睡眠函数都是不精确的
- Udp 在 QT 定时器信号中写入数据报
- AVR CTC模式下的16位定时器
- Linux C++定时器与软实时支持
- 在Qt中实现精确定时器
- 在不中断串行的情况下禁用Arduino上的定时器0中断
- 跨平台C++高精度事件定时器实现
- 重新启动套接字编程select()中的定时器
- QTCPSocket同时定时器启动
- Qt定时器只能用于QThread启动的线程