【发布时间】:2019-07-29 22:58:28
【问题描述】:
所以我有 2 个类,一个名为 ConsoleInput,其中包含成员函数 check4Flood,第二个名为 AntiFloodSys,其中存在用于信号槽系统的连接函数,以及它的信号 (QTimer) 和槽。 AntiFloodSys 对象位于 check4Flood 成员函数中,其范围永远不会结束,因为内部存在无限的 while 循环。因此,该对象永远不会被破坏。所以当对象anti被创建时,AntiFloodSys类的构造函数被调用,因此信号和槽之间的连接。 我的问题是在代码的哪一点连接超时信号和 mySlot 是分开的,所以插槽永远不会被触发?
ConsoleInput cpp 文件如下所示:
void ConsoleInput::check4Flood(int& lineCounter)
{
AntiFloodSys anti;
while(1)
{
std::string chatLine[2];
std::cin >> chatLine[0] >> chatLine[1];
anti.input(chatLine[0], chatLine[1]);
}
}
和这样的 AntiFloodSys 类:
AntiFloodSys::AntiFloodSys(QObject *parent) : QObject(parent)
{
timeFrame = 1000 ;
timer = new QTimer;
connect(timer, SIGNAL(timeout()), this, SLOT(mySlot()));
timer->start(timeFrame);
std::cout << "AntiFloodSys constructor - timer starts " << "\n";
}
AntiFloodSys::~AntiFloodSys()
{
std::cout << "AntiFloodSys Destructor" << "\n";
}
void AntiFloodSys::input(std::string nick_, std::string line_)
{
nick = nick_;
line = line_;
std::cout << "nick: " << nick << " line: " << line << " " << "\n";
}
void AntiFloodSys::mySlot()
{
std::cout << "slot" << "\n";
}
【问题讨论】: