1

我正在编写一个小型 GUI 来使用 openSSL 命令行界面加密和解密文件。我需要一个进度条来显示加密/解密大文件时的加密进度。由于我使用 cli 接口,因此没有中间返回值或其他帮助我的方法,所以我发现知道进度的唯一方法是编写一个多线程程序,其中第一个线程在终端中调用 openSSL

例如

system("openssl aes-256-cbc -in clear_text_file -out encrypted_file")

而第二个线程每秒读取输出文件的文件大小,并将其与原始文件大小进行比较来计算进度条值。这里的问题是没有线程同步,所以当 pc 忙时,第二个线程通常不是每秒执行一次,而是每隔五六个或更糟直到第一个线程结束才执行一次,结果是进度条始终保持为零,直到加密过程结束。我还尝试将第一个线程的优先级设置为低,但我注意到没有任何变化(我在 Linux 上使用 Qt5.1,我在某处读到不支持 Linux 中的线程优先级,所以这可能是原因)。

如果这里有人可以向我建议其他(最好是更好的)方法来获得相同的结果,我将非常感激..

先感谢您

4

2 回答 2

0

我建议你使用

proc = new QProcess();
proc.start("openssl aes-256-cbc -in clear_text_file -out encrypted_file");
connect(proc,SIGNAL(readyReadStandardOutput()),this,SLOT(readStdout()));

我认为openssl会有处理信息输出到standerOutput,你可以使用readyReadStandardOutput()来触发自己定义的readStdout()来获取处理信息。

于 2013-09-13T13:29:41.307 回答
0

您可能需要直接使用 openSSL(或等效)库来获得更精细的进度更新,而不是通过调用单独的进程和轮询文件大小(只会根据文件刷新的频率进行更新)

于 2013-09-13T13:22:54.057 回答