将CStringArray传递给Thread

时间:2013-11-04 01:21:59

标签: c++ multithreading

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

CStringArray* m_CStringArray = (CStringArray*)pParam;

我访问元素:

m_CStringArray->GetAt(1);

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

INT_PTR total_count = m_CStringArray->GetCount();

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

1 个答案:

答案 0 :(得分: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 );
}