首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问一个线程内 对话框的有关问题,望大家解答? 多谢! 祝中秋节快乐

2012-01-12 
请教一个线程内 对话框的问题,望大家解答? 谢谢! 祝中秋节快乐!首先祝大家中秋节快乐!提问:小弟我现在面临

请教一个线程内 对话框的问题,望大家解答? 谢谢! 祝中秋节快乐!
首先   祝大家中秋节快乐!

提问:

    小弟我现在面临一个问题,我在一个工程中处理一些数据比较庞大,等待时间比较长,现在想在处理数据的过程中   开辟一个新的线程,该线程显示一个对话框,对话框中加了一个CProgressCtrl控件来不断的显示滚动,等待数据处理完成后,对话框消失.

请教如何实现?尽量详细些,多谢

[解决办法]
不用开辟新的线程

使用非模式对话框显示进度。在处理数据过程中,自己估算处理时间和处理两定期的更新对话框的进度条。
[解决办法]
对话框弄个接口更新进度条
线程收了数据,需要更新进度条就调用那个接口更新
线程技术,对话框关闭销毁
[解决办法]
不用新开对话框,向已有的对话框发消息,更新进度条
[解决办法]
如果你要在线程内创建一个对话框的话,那么这个线程需要消息循环.
[解决办法]
其实开一个简单的工作线程,一种方法是将对话框的句柄作为参数传进线程,另一种方法就是向对话框发消息,消息的参数只要能表示进度就可以了.
[解决办法]
直接::AfxBeginThread(ThreadProc/*线程处理函数*/,
THREAD_PRIORITY_NORMAL,this/*传递对话框指针*/, CREATE_SUSPENDED);

int WINAPI ThreadProc(LPVOID pointer)
{
CRasterViewDlg* pDlg = (CRasterViewDlg*)pointer;//将接受到的LPVOID类型的指针强制类型转换
pDlg-> m_progressCtrl.SetPos(xxxxx);
}
[解决办法]
经常用非模态对话框直接显示
[解决办法]
一般这种问题中线程中只是用来处理数据,对话框还是放在主线程中
[解决办法]
根据你自己数据处理的进度来SetPos阿
[解决办法]
int WINAPI ThreadProc(LPVOID pointer)
{
CRasterViewDlg* pDlg = (CRasterViewDlg*)pointer;//将接受到的LPVOID类型的指针强制类型转换

处理1
pDlg-> m_progressCtrl.SetPos(xxxxx);

处理2
pDlg-> m_progressCtrl.SetPos(xxxxx);

处理3
pDlg-> m_progressCtrl.SetPos(xxxxx);

}

数据处理 取不到它的执行进度
----------------------------
那就要求修改你的数据处理组件接口,要求能返回正确的进度。
比如现在你的数据处理组件接口为一个函数接口 DealData();
那么它应该修改为

beginDealData()
while( !EndDealData() )
{
int nProgress = DealData();
pDlg-> m_progressCtrl.SetPos( nProgress );
};


热点排行