小弟初学多线程,希望大家多多指教,先谢了:)MyFunction是我写的函数,要建N个MyFunction线程来处理N个文件,请问不同的文件名怎么传给这个线程啊?我写的这个gtmp的值总是重复.
还有,在线程里怎么把数据现实在主线程文本框里啊?void CmtDlg::OnBnClickedOk()
{
....
for(i=0;i<=N;i++)
{
gtmp.Format("%d",i);

AfxBeginThread(MyFunction,&gtmp);
}
..........
}UINT MyFunction(LPVOID pParam)
{
...........
CString *tmp =(CString *)pParam;
CString temp=*tmp; CStdioFile file;
file.open(temp+".txt",CFile::modeRead));
...........
}

解决方案 »

  1.   

    你只有1个gtmp啊定义个数组gtmp[i].Format(...);
    ...
    ...
    AfxBeginThread(MyFunction ,&gtmp[i])线程间通信,可以用临界区,发送消息来通知主更新
      

  2.   

    出现这种情况的原因是因为你CreateThread后函数返回了,但线程函数还没有运行到 CString *tmp = (CString*)pParam; 而此时你的 pParam 已经在主线程中被修改了,因此可能几个线程会取到相同的 pParam 内容要解决这个问题你可以在主线程中使用多个CString,分别传递给不同的线程
    也可以在主线程中使用初始化事件并等待线程取得这个值后再创建下一个线程(但这样效率并不太好)
      

  3.   

    1.用不同的变量来保存你要传入的参数,比如用数组,原因如qrlvls(空 气) ( ) 所说
    2.定义全局变量来保存你要显示的信息,在主线程显示就可以了(定时器或者发消息等)