c++ - 使用 wxwidget 在 while 循环下移动多个文件

标签 c++ wxwidgets

我一直在为自己写一个c++代码,它在一个目录中迭代并将文件移动到与文件同名的目录中

   \\\\
           void foldersFrame::OnButton2Click(wxCommandEvent& event)
            {
                wxFileName mkr;
                StaticText1->SetLabel(_("0"));
                wxString fn;
                wxString newf;
                wxDir *dir=new wxDir(TextCtrl1->GetLabel());
                bool cont = dir->GetFirst(&fn);
                while (cont)
                {
                    int mm=fn.Find('.',true);
                    newf=fn.Mid(0,mm);
                    if(! mkr.DirExists(dir->GetName()+_("\\")+fn)){
                        StaticText2->SetLabel(_("copying  ")+fn);
                        if (! mkr.DirExists(dir->GetName()+_("\\")+newf)){
                            mkr.Mkdir(dir->GetName()+_("\\")+newf);
                            if (wxCopyFile(dir->GetName()+_("\\")+fn,dir->GetName()+_("\\")+newf+_("\\")+fn)){
                                wxRemoveFile(dir->GetName()+_("\\")+fn);
                            }
                            newf=StaticText1->GetLabel();
                            long d1;
                            if(!newf.ToLong(&d1));
                            d1+=1;
                            StaticText1->SetLabel(wxString::Format(wxT("%i"),d1));
                        }
                    }
                    cont = dir->GetNext(&fn);
                }
                wxSafeShowMessage(_("Message"),_("Finished"));
            }

但是我写的代码好像效率很低,移动文件很费时间,复制的时候窗口没有反应,谁帮我重写一下..!!!!

最佳答案

要使应用程序窗口保持响应,但又不想在单独的线程中进行文件复制带来额外的麻烦,请尝试使用 Yield。需要照顾!

wxApp::产量

bool Yield(bool onlyIfNeeded = false)

让出对窗口系统中未决消息的控制。这可能很有用,例如,当耗时的进程写入文本窗口时。如果没有偶尔的让步,文本窗口将不会正确更新,并且在具有协作多任务处理的系统上,例如 Windows 3.1,其他进程将不会响应。

然而,应该谨慎行事,因为屈服可能允许用户执行与当前任务不兼容的操作。在处理过程中禁用菜单项或整个菜单可以避免不必要的代码重入:请参阅::wxSafeYield 以获得更好的功能。

请注意 Yield() 不会刷新消息日志。这是有意为之的,因为调用 Yield() 通常是为了快速更新屏幕,弹出消息框对话框可能是不受欢迎的。如果您确实希望立即刷新日志消息(否则它将在下一个空闲循环迭代期间完成),请调用 wxLog::FlushActive。

递归调用 Yield() 通常是一个错误,如果检测到这种情况,则会在调试构建中引发断言失败。但是,如果 onlyIfNeeded 参数为 true,该方法将只返回 false。

关于c++ - 使用 wxwidget 在 while 循环下移动多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13322261/

相关文章:

python - 项目模块导入 - Python2.7 [初学者]

c++ - 如何仅使用 OpenCV HighGui 制作一个简单的一键式窗口?

c++ - 如何禁用 eclipse cdt 中的所有代码分析?

c++ - 使用 string* 作为 unordered_set 中的键

c++ - 成员方法必须使用的帮助函数在哪里/如何声明和实现?

c++ - 显示图像 Sprite 中的特定图像

c++ - 类中的 int main

c++ - 使用 Bind 创建处理程序函数以处理单击的菜单项 - wxWidgets 3.0

c++ - wxWidgets - 将所有文件夹写入列表框

c++ - 如何完整读取INI文件?