0

我有一个对话框,它以 CStringArray 的形式从列表框中返回多项选择的结果,我将返回的结果传递给线程以处理文件。我像这样在线程中引用数组:

CStringArray* m_CStringArray = (CStringArray*)pParam;

我访问元素为:

m_CStringArray->GetAt(1);

但我得到一个空元素。如果我得到计数​​使用。

INT_PTR total_count = m_CStringArray->GetCount();

它确实向传入的数组返回正确的计数。访问传递给线程的 CStringArray 元素的正确方法是什么?

4

1 回答 1

1

听起来您正在获得未定义的行为。您可能犯的一个错误是CStringArray在启动新线程时使用本地副本,但忘记了本地副本可能在新线程获得处理器时间之前超出范围。

解决这个问题的最简单方法是CStringArray在堆上分配(使用new)并让线程处理它。

if(m_ProcessDlg.DoModal() == IDOK)
{
    CStringArray *arr = new CStringArray;
    arr->Copy( m_ProcessDlg.m_ProcessArray );
    CWinThread *pThread = AfxBeginThread( ExtractThread, (LPPARAM)arr );
}
于 2013-11-04T01:27:31.890 回答