最近做一个程序,CFromView的单文档工程,使用一条worker线程遍历文件夹,找到需要的文件就把信息输到一个主窗口的CListCtrl里面,但是问题出现了:无论我在线程参数里面传CListCtrl的指针还是主窗口句柄,都没办法完成和UI的通讯.程序界面会死掉,部分代码如下:线程参数定义为:
typedef struct _THREAD_PARAM
{
HWND   m_hWnd;   //CListCtrl所在的父窗口句柄
TCHAR *m_Path;   //欲遍历的文件夹
}线程代码如下: ::SetCurrentDirectory(pThreadParam->m_szPath);
bWorking = finder.FindFile("*.zip", 0);
while(bWorking){
bWorking = finder.FindNextFile(); HUNZIP      huz;
ZIPENTRY    ze;

strcpy(ze.Name, "test.xml");
memset(szFileName, 0x00, MAX_PATH);
sprintf(szFileName, "%d", i);
strPath = finder.GetFilePath();
UnzipOpenFile(&huz, strPath.GetBuffer(0), 0);
UnzipFindItem(huz, &ze, 0);
memset(szFileName, 0x00, MAX_PATH);
sprintf(szFileName, "%d.xml", i);
UnzipItemToFile(huz, finder.GetFileName()+".xml", &ze);
UnzipClose(huz);
::SendMessage(pThreadParam->m_hWnd, WM_UNZIPFINISHED, (WPARAM)i, (LPARAM)szFileName);
i++;
}
请各位帮帮忙,分不够可以再加.

解决方案 »

  1.   

    在view里面,响应了WM_UNZIPFINISHED消息吗?
    这样看上去似乎没问题```程序是公司产品吗?大吗?方便的话传给我帮你调`
      

  2.   

    SendMessage很容易造成死锁的
    用SendMessageTimeOut
    参见http://www.microsoft.com/downloads/details.aspx?FamilyID=b17f819f-f5ec-4e7e-865e-fb9899908aeb&displaylang=en
      

  3.   

    问题解决了,原因是我在UI里面有一个WaitForSingleObject来等待线程结束清理垃圾,问题就出在这,UI里面程序会停在这里,这样就没办法处理SendMessage过来的消息。更改方案,设定线程结束消息,等结束后清理垃圾,问题就解决了。不过还是感谢朋友们的帮助。