MFC中的线程在同时显示消息和进度时出现问题?

MFC中的线程在同时显示消息和进度时出现问题?,mfc,multithreading,Mfc,Multithreading,我正在MFC中处理线程。我不知道如何使用线程。。我不能达到我所期望的!我实际尝试的是读取目录并显示文件名,同时,进度控件应该显示进度..我创建了一个动态静态来显示文件名和进度条控件来显示进度…这里发生的是,它首先一个接一个地显示所有文件名,然后再显示进度…所以,我有点困惑..有人能告诉我怎么做或给我参考一些文章吗…如果你愿意,我可以发布代码这似乎为每个文件创建了10个线程 for(int i =0;i<10;i++) { THREAD

我正在MFC中处理线程。我不知道如何使用线程。。我不能达到我所期望的!我实际尝试的是读取目录并显示文件名,同时,进度控件应该显示进度..我创建了一个动态静态来显示文件名和进度条控件来显示进度…这里发生的是,它首先一个接一个地显示所有文件名,然后再显示进度…所以,我有点困惑..有人能告诉我怎么做或给我参考一些文章吗…如果你愿意,我可以发布代码

这似乎为每个文件创建了10个线程

        for(int i =0;i<10;i++)
        {
            THREADINFOSTRUCT *_param = new THREADINFOSTRUCT;
           _param->_this = this;
            AfxBeginThread(MyThread,_param,THREAD_PRIORITY_ABOVE_NORMAL);
            ....
        }
for(int i=0;i_this=this;
AfxBeginThread(MyThread,参数,线程优先级高于正常值);
....
}
所有10个线程同时尝试设置一个进度条。(这很糟糕)

ts->\u this->m\u ProgressCtrl.SetRange(0500);
而(ts->\u this->m\u ProgressCtrl.GetPos()<500)
{
睡眠(250);
ts->_this->m_ProgressCtrl.StepIt();
}
我们看不到创建进度条的代码。但它可能属于主线程。因此,当这10个线程尝试并
SetRange
GetPos
StepIt
时,它们实际上是在向主线程发送消息,告诉它做这些事情

同时,主线程在
do{}}while(FindNextFileW(handle,&findData));
循环中,并且没有泵送消息。因此,这些线程都会等待循环完成,主线程返回其消息泵

然后,您的每个线程都会被唤醒,并从调用
SetRange
等返回。但一次只能返回一个线程,因为主线程一次只能处理一条消息

为此,您需要将
FindNextFile
循环移动到一个线程中,并且需要让主线程返回到泵中,以便在事情进展时更新UI


您还需要停止直接从任何非主线程设置进度条的尝试。改为使用PostMessage将消息发回主线程并让它设置进度条。这样,您的线程就不会阻塞并等待主线程代表它们与进度条对话。

谢谢您的回复…现在我理解这个概念。谢谢你的解释…在阅读了你的文章后,我转到了下面的链接…如果你能给我介绍一些其他与线程相关的文章,那将是gr8。。。。。。
ts->_this->m_ProgressCtrl.SetRange (0, 500);
while (ts->_this->m_ProgressCtrl.GetPos () < 500)
{
    Sleep(250);
    ts->_this->m_ProgressCtrl.StepIt ();
}