我正在研究一个小例子,在我的例子中使用临界区有点好奇。我正在做的是,我有一个 CStringArray(其中添加了 10 个元素)。我想将这 10 个元素(字符串)复制到另一个 CStringArray(这样做是为了了解线程和关键部分),我创建了 2线程,Thread1 会将前 5 个元素复制到另一个 CStringArray,Thread2 将复制其余元素。这里使用了两个 CStringArray,我知道一次只能访问 1 个线程。我想知道如何通过使用临界区来解决这个问题或任何其他方法。
void CThreadingEx4Dlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
thread1 = AfxBeginThread((AFX_THREADPROC)MyThreadFunction1,this);
thread2 = AfxBeginThread((AFX_THREADPROC)MyThreadFunction2,this);
}
UINT MyThreadFunction1(LPARAM lparam)
{
CThreadingEx4Dlg* pthis = (CThreadingEx4Dlg*)lparam;
pthis->MyFunction(0,5);
return 0;
}
UINT MyThreadFunction2(LPARAM lparam)
{
CThreadingEx4Dlg* pthis = (CThreadingEx4Dlg*)lparam;
pthis->MyFunction(6,10);
return 0;
}
void CThreadingEx4Dlg::MyFunction(int minCount,int maxCount)
{
for(int i=minCount;i<=maxCount;i++)
{
CString temp;
temp = myArray.GetAt(i);
myShiftArray.Add(temp);
}
}