gpt4 book ai didi

c++ - 在 QTimer::singleShot 中删除它

转载 作者:行者123 更新时间:2023-11-28 00:26:22 26 4
gpt4 key购买 nike

<分区>

在我的 qt 服务器应用程序中处理请求时,有时我必须等待“资源”变为空闲。根据我的理解,在插槽实现中休眠会停止消息循环,因此这可能无法按预期工作:

void MyClass::mySlot(/*some params here*/)
{
while (resource.busy())
{
QThread::sleep(50);
if (timeout)
break;
}
if (!timeout)
doWork();
}

我想到了使用 QTimer,例如与单发。我的研究表明,我不能通过定时器的信号传递参数。

我的下一个方法是为每个请求创建一个新对象的实例,将参数放入该请求并将该对象用作计时器信号的接收者。在这个插槽中,我必须删除请求对象,因为我没有存储对它的引用(也不想)。

void MyClass::mySlot(/*some params here*/)
{
Request* request;
request->setParams(...);
request->processRequest();
}

void Request::processRequest()
{
if (resource.busy())
{
// timeout missing in example/pseudocode
QTimer::singleShot(50, this, SLOT(processRequest()));
}
else
{
doWork();
delete this; // allowed by C++, but ugly. allowed by qt? better approach?
}
}

有没有更好的方法来释放请求对象,或者有更好的方法来解决我的问题?如果不是:在这种情况下使用 delete this; 是否有效?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com