for*_*idt 9 c++ mfc multithreading dialog progress-bar
我的应用程序可能需要一段时间才能连接到数据库.这个连接使用单个库函数调用,即我不能在其中放入进度更新并进行回调或类似的操作.
我的想法是在连接到数据库之前在单独的线程中创建一个带有进度条的对话框.此对话框将不断更改进度状态,CProgressCtrl::StepIt()以便用户看到正在发生的事情.
在设置完对话框并执行其操作之后,我想从主线程调用数据库连接函数.连接功能完成后,我想停止进度条线程.
让我画一幅画:
CMyApp:: ProgressThread
InitInstance() .
| .
| .
+-Create Dialog-+
| |
| Animate
Connect Progress
to Bar
DB |
| |
+-Destroy Dlg---+
| .
| .
Run Code Online (Sandbox Code Playgroud)
那可能吗?如果有,怎么样?
也许整个事情也可以使用计时器.可能会简单得多,但我也无法做到这一点.
CProgressCtrl::SetMarquee()哪些可能正是我需要的但我无法使用它因为应用程序没有Unicode支持.更新2
我得到它的方式AlexEzh和Javier De Pedro建议:将DB stuf放入自己的线程.
最初我担心如何处理错误,但它实际上与之前的情况非常相似.
true.CMyDialog::Animate()哪些调用CProgressCtrl::StepIt()然后调用Sleep().false在完成时将running-flag设置为.缺点:将鼠标移到窗口上不起作用.它是看不见的.因此,不能使用取消按钮或其他交互式对话元素.但是,我可以忍受这一点.
既然您喜欢这个图表,现在的样子如下:
CMyApp:: WorkerThread
InitInstance() .
| .
| .
Create Dialog .
| .
+-Start Thread--+
| |
| Connect
Animate to
Progress DB
Bar |
| |
+-Thread Ends---+
| .
Destroy Dlg .
| .
Run Code Online (Sandbox Code Playgroud)