- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是学习 Qt 的初学者,并试图理解提供的 Qt example用于下载操作。在 downloadmanager.cpp ,成员函数如下:
void DownloadManager::append(const QUrl &url)
{
if (downloadQueue.isEmpty())
QTimer::singleShot(0, this, SLOT(startNextDownload()));
downloadQueue.enqueue(url);
++totalCount;
}
downloadQueue
为空,则需要在添加 url 之前激活 startNextDownload()
。 (注意:如果 downloadQueue
为空,则 startNextDownload()
结束程序)QTimer::signleShot(x, y, z)
已被使用。据我了解,它是一个计时器,它以 0 毫秒的延迟激活插槽。 我是初学者,例如:
statement1;
statement2;
我习惯于看到 statement1
在继续处理 statement2
之前运行和完成。但是尝试学习 Qt 并阅读给定的示例,我看到 SLOT(startNextDownload())
在 downloadQueue.enqueue(url);
发生后被激活。我试图理解为什么这样做有效。
最佳答案
这会在消息队列中排队回调。
计时器立即结束,一条消息被发布到消息队列中。当进程进入下一次主循环时,startNextDownload()
函数被调用。此时,该 URL 已在队列中。
startNextDownload()
函数从调度上下文调用,可以安全地更改窗口内容。这样,DownloadManager
类就可以在多线程应用程序中使用,其中启动下载的线程可能与 Paint 事件的处理程序同时运行。通过从处理 Paint 事件的同一线程调用它,您可以确保没有处理此类事件,并且您可以安全地更新小部件。
如果之后需要重新绘制一个小部件,它会请求重新绘制,如果该小部件当前可见,操作系统将发送一个Paint 事件。
关于c++ - QTimer::singleShot(0, object SLOT(obj_slot())) 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41524265/
我是学习 Qt 的初学者,并试图理解提供的 Qt example用于下载操作。在 downloadmanager.cpp ,成员函数如下: void DownloadManager::append(c
我是一名优秀的程序员,十分优秀!