我有一個屬性表,我有四頁。在第二頁我有一個列表控件和一個按鈕。並在第二頁我創建了兩個線程。當我點擊下一個在第一頁,我試圖使用從網絡中檢索的一些值枚舉列表控件。因此,在這裏,搜索對話框和枚舉列表正在兩個並行運行的不同線程中處理。在頁面的前面,搜索對話框彈出並且後臺從網絡的價值檢索和列表得到枚舉這些值。在那個時候,如果我點擊客戶區,那麼這個搜索對話框正在最小化。但這應該不會發生,除非搜索對話框被解僱,我不能給予對父窗口的訪問(與ModalDiaolg框相同的場景,正如我們所知道的,除非子窗口關閉,否則我們將無法訪問父權,同樣的場景是必需的)f或我)。這是我爲了讓這些線程一次運行而完成的代碼。如何使用多線程鎖定資源?
BOOL CModelSelectionView::CreateModelThread()
{
unsigned threadID;
if(NULL == (m_hModelThread = (HANDLE)_beginthreadex(
NULL,
0,
&CModelSelectionView::ModelThreadProc,
reinterpret_cast<void*>(this),
0,
&threadID)))
{
return FALSE;
}
return TRUE;
}
//這個線程是搜索對話框
UINT CModelSelectionView::ModelThreadProc(void* lpContext)
{
CModelSelectionView *pSelectModelFromList =
reinterpret_cast<CModelSelectionView*> (lpContext);`
AfxSetResourceHandle(theApp.m_hDialogResource);
CSearchingView SearchView(IDD_DIALOG_SEARCH);
INT nRes = SearchView.DoModal();
::CloseHandle(pSelectModelFromList->m_hModelThread);
pSelectModelFromList->m_hModelThread = NULL;
_endthreadex(0);
return TRUE;
}
BOOL CModelSelectionView::CreateInstallerThread()
{
unsigned threadID;
if(NULL == (m_hInstallerThread = (HANDLE)_beginthreadex(
NULL,
0,
&CModelSelectionView::InstallerThreadProc,
reinterpret_cast<void*>(this),
0,
&threadID)))
{
return FALSE;
}
return TRUE;
}
用於初始化一些值
UINT CModelSelectionView::InstallerThreadProc(void* lpContext)
{
CModelSelectionView *pSelectModelFromList =
reinterpret_cast<CModelSelectionView*> (lpContext);
pSelectModelFromList->m_listCtrl.DeleteAllItems();
LVITEM lvitem;
lvitem.mask = LVIF_TEXT;
lvitem.iItem = 0;
lvitem.iSubItem = 0;
lvitem.pszText = L"";
lvitem.cchTextMax = sizeof(lvitem.pszText);
int nItem = pSelectModelFromList->m_listCtrl.InsertItem(&lvitem);
::Sleep(200);
pSelectModelFromList->m_listCtrl.SetItemText(0,1,L"XXX");
pSelectModelFromList->m_listCtrl.SetItemText(0,2,L"YYY");
pSelectModelFromList->m_listCtrl.SetItemText(0,3,L"ZZZ");
pSelectModelFromList->m_listCtrl.SetItemText(0,4,L"AAAA");
::Sleep(200);
::TerminateThread(pSelectModelFromList->m_hModelThread, 0);
::CloseHandle(pSelectModelFromList->m_hModelThread);
pSelectModelFromList->m_hModelThread = NULL;
::CloseHandle(pSelectModelFromList->m_hInstallerThread);
pSelectModelFromList->m_hInstallerThread = NULL;
_endthreadex(0);
return TRUE;
}
清單//第二個線程,直到除非搜索對話框關閉它不應該被允許訪問父窗口。例如,當點擊一個按鈕,併爲那個按鈕處理程序,我打電話domodal然後彈出一個子對話框,直到除非我們忽略那個對話框我們w生病不允許訪問父母的權利,同樣我必須得到在這種情況下。
任何人都可以建議我怎麼做到這一點。
任何人都可以請建議我如何