Hi Thiago, thanks for your comment!

On 2/20/23 07:16, Thiago Macieira wrote:

That's correct. The name of the "wait For BytesWritten" method means it waits
for the bytesWritten signal to be emitted. That is emitted when any byte gets
written, not when all bytes finish writing.

If after the signal is emitted, bytesToWrite() is still too high for you, you
can wait again until it drops to a low enough number.

I calculated the number of pending bytes myself by adding the count provided by bytesWritten to the total number of bytes written (the total number of bytes read minus that number should be identical to what bytesToWrite returns).

So I have tried to do that by removing the while loop and putting the rest in a function that's called whenever the bytesWritten signal is emitted - but only after the total number of bytes written reached the total number of bytes I had previously read (i.e., before reading more I would wait until everything has been written/sent). The code got stuck at 64KB pending bytes that have not yet been written (again, a flush method would be useful).

My next approach was that I would save the number of bytes written in one go (the bytesWritten argument) because I noticed that's 64KB too, assuming QProcess would always keep up to 64KB pending bytes somewhere. Then I would call the next iteration of my loop as soon as that was the maximum number of pending bytes not yet written (bytes read - bytes written <= 64KB). With that approach, the code got stuck a little later, as the number of bytes written in one go (block size?) began increasing to 128KB and further.

Isn't it possible to to turn off the internal write cache of QProcess? Or at least set a reasonable, known limit like 1 MB so it won't grow to 4 GB?



Philip


_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to