在CFormView里怎么让worker线程与UI交互
在CFormView里如何让worker线程与UI交互
最近做一个程序,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++;
}
请各位帮帮忙,分不够可以再加.
------解决方案--------------------
SendMessage很容易造成死锁的
用SendMessageTimeOut
参见http://www.microsoft.com/downloads/details.aspx?FamilyID=b17f819f-f5ec-4e7e-865e-fb9899908aeb&displaylang=en
最近做一个程序,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++;
}
请各位帮帮忙,分不够可以再加.
------解决方案--------------------
SendMessage很容易造成死锁的
用SendMessageTimeOut
参见http://www.microsoft.com/downloads/details.aspx?FamilyID=b17f819f-f5ec-4e7e-865e-fb9899908aeb&displaylang=en