593042433 2014-03-04 12:54 采纳率: 0%
浏览 3661

MFC循环创建多线程同时处调用同一函数读写文本和excel操作

CString fname[3000];
CString name[1024] ;
int j1 ;
int nIndex = 0;
void CDisposeXJXDlg::OnBtnSelSrcFile()
{
// TODO: Add your control notification handler code here

CFileDialog dlg(TRUE, NULL, NULL ,OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT
    |OFN_ALLOWMULTISELECT,"(*.tmp) | *.tmp||",AfxGetMainWnd());

TCHAR* pszFile =new TCHAR[MAX_PATH];
memset(pszFile,0,sizeof(TCHAR)*MAX_PATH);

dlg.m_ofn.lpstrFile = pszFile ;


if(IDOK==dlg.DoModal())
{

    int i = 0 ;
    POSITION pos ;
    //把起始位置赋给pos

    pos = dlg.GetStartPosition();
    //把打开的多个文件名赋给fname数组
    while(pos!=NULL)
    {
        fname[i] = dlg.GetNextPathName(pos);

        name[i] = fname[i].Right(fname[i].GetLength()-fname[i].ReverseFind('\\')-1);

        m_ListOutInfo.AddString(name[i]);

        i++ ;
    }
}

}

int t=0 ;
int tt = 0 ;
int TheradsCount = 0;
int j2 = 0;
int j3 = 0;
CWinThread* pThread[MAX_THREADS];

void CDisposeXJXDlg::OnBtnTypeset()
{

GetDlgItem(IDC_BTN_TYPESET)->EnableWindow(FALSE);


TheradsCount = m_ListOutInfo.GetCount();

j2 = TheradsCount ;

for(int m1=0 ;j2<MAX_THREADS? m1<j2 :m1<MAX_THREADS ;m1++)
{
     pThread[m1] =AfxBeginThread(CDisposeXJXDlg::ThreadFun,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);

    pThread[m1]->ResumeThread();

}

}

UINT CDisposeXJXDlg::ThreadFun(LPVOID pParam)
{
CDisposeXJXDlg* dlg=(CDisposeXJXDlg*)pParam;

WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);

dlg->m_strFbdPath = fname[t];
dlg->StartDispose(fname[t]);


delete  []dlg ;
Sleep(100) ;
 t++ ;



ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL);
return 0 ;

}
这是我自己写的,在MFC对话框里添加了一个列表框,打开多个文本然后点击按钮执行OnBtnTypeset()函数,最后想通过创建多个线程,同时调用StartDispose(fname[t])来处理多个文本和处理EXCEL,做了几天了出来的结果就是线程只能按队列执行,文本读取或EXCEl处理一两个对话框就结束了或者内存泄露,完全达不到任务要求, 求大神们给指点,真心求教....谢谢了!

  • 写回答

1条回答 默认 最新

  • 593042433 2014-03-10 11:23
    关注

    经过多次的反复试验证明以上程序有效,失败的原因在于文件本身内容不符合程序的某些处理需求导致的,对于多线程按队列处理同一资源还是有很大帮助

    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程