在弄清楚如何执行此操作时遇到一些问题。将尝试解释我首先要做什么。
首先,我有一个包含只读文件的类。这个类将使用另一个类(StorageProvider)来上传这个文件的块。该类包含一个 QNetworkAccessManager。上传文件块时,我会将块发送到 StorageProvider 类,然后使用它发送到 QNAM 的 REST 请求。当 QNetworkReply 完成时,StorageProvider 将向上传者发出信号(以便它知道该块已完成)。
Uploader -> StorageProvider -> QNetworkAccessManager -> Internet
到目前为止还不错吧?我可以在上传程序中放置一个插槽,以便在 StorageHandler 完成它在 QNAM 上发出的请求时进行监听。
但是,由于 QNAM 可以通过 HTTP 同时执行 6 个请求,因此我正在考虑这样做,以便当 StorageProvider 发出信号表示它已完成一个块时,并且唯一的 BlockId 连接到该信号,允许上传者知道哪个块完成了,而不仅仅是它完成了。
这意味着每当 StorageProvider 发出信号(blockId)时将调用的插槽必须存储已完成的 id,然后查找未上传的新 id(忘了提我有一个已经上传的 ID 列表,所以当它通过 ids (0...1000) 时,它还需要 1. 将文件的索引向前推 4mb 2. 如果是,请检查已经存在的块的列表在。
所以,我的问题是:如果我有一个插槽将“currentBlockId”增加一,直到它找到下一个可以上传的插槽+读取文件 4mb,直到我们位于位置“currentBlockId”* 4mb(索引文件中的文件将像索引一样被向前推,它不会是随机访问。当这个索引到达文件末尾时,我们就完成了)并且每当完成 5 个上传中的一个时都会调用这个插槽,我会有问题吗? 我问的原因是因为 QNAM 使它在不同的线程中调用,这可能会同时发出 2-5 个“finished()”信号,这将调用同时处理该信号的插槽? 就像,我不太确定那时会发生什么。请注意,我的代码都没有线程化,理论上信号应该排队吗?并且插槽会被调用5次,一个接一个?
谢谢