CKMeansInputDlg dlg;
if (dlg.DoModal()==IDOK)
{
//只有参数有效的时候才计算K均值
if (dlg.m_KMParameters.IsValid)
{
DatasetKM=dlg.DatasetSel;
ParaKM=dlg.m_KMParameters;
if (CreateThread(NULL,0,KMeansThreadFunc,NULL,0,&threadID))
{
Sleep(200); }
}
}
当程序运行到SLeep()语句时出现如下提示:
Debug Assertion Failed! 
 
program:................ 
 
File: wincore.cpp 
 
Line: 958 。
其中线程KMeansThreadFunc中用到的函数被我放在自己创建的DLL文件里.
求各位大牛帮忙分析

解决方案 »

  1.   

    线程KMeansThreadFunc有没有用同步?
      

  2.   

    KMeansThreadFunc里有问题了,调试下,看calll stack窗口。
      

  3.   


    怎么调试呢  我对call stack窗口不怎么会  谢了
      

  4.   

    是不是程序在sleep(200)时间段无法跳入线程之中?
      

  5.   

    算了,就在KMeansThreadFunc里入口处设个断点吧。
      

  6.   

    调试进不去那线程KMeansThreadFunc里面
      

  7.   

    哦?KMeansThreadFunc贴出来看看?
      

  8.   

    if (CreateThread(NULL,0,KMeansThreadFunc,NULL,0,&threadID))
    {
    Sleep(200); }
    把这个代码拉开来看,改成
    HANDLE hThread( NULL );
    hThread = CreateThread(NULL,0,KMeansThreadFunc,NULL,0,&threadID);if( NULL != hThread )
    {
        Sleep( 200 );
    }
    看是不是CreateThread时出错了。
      

  9.   

    hThread = CreateThread(NULL,0,KMeansThreadFunc,NULL,0,&threadID);这句没错误,hThread有值不等于0;还是到Sleep(200)那句出错,跳到汇编代码:5F437849 mov  eax,dword ptr [ebp-8]了
      

  10.   

    DWORD WINAPI KMeansThreadFunc(LPVOID threadNum)
    {
    KMeans *km=new KMeans;
    km->BASetDataset(DatasetKM);
    km->BAGetImageInfo();
    km->BA_ROI.xoffset=0;
    km->BA_ROI.yoffset=0;
    km->BA_ROI.width=km->width;
    km->BA_ROI.height=km->height;
    km->BA_COI.num=km->bandCounts;
    km->BA_COI.bandindex=NULL;
    km->BASetBlkSize(128, 128);
    km->BAGetBlockInfo();
    km->MaxPixelROI=new double[km->bandCounts];
    km->MinPixelROI=new double[km->bandCounts];
    km->AverageROI=new double[km->bandCounts];
    km->StdDevROI=new double[km->bandCounts];

    km->BAComputeROIStatisticsInfo();

    km->KMSetInitParameter(ParaKM.TypeNum,ParaKM.Iteration,ParaKM.Threshold);

    km->KMSetOutFileName((char*)(LPCTSTR)ParaKM.filename);
    km->KMComputeInitCenter();
    km->KMRunKMeans();
    CMainFrame *pMain=(CMainFrame*)AfxGetApp()->m_pMainWnd;
    CHIPSView *pView=(CHIPSView*)pMain->GetActiveView();
    pView->OpenfileByName((char*)(LPCTSTR)ParaKM.filename);
    return 0;
    }[帮忙分析下,我找了几天的原因了还是没头绪Quote=引用 8 楼 eyey1 的回复:]哦?KMeansThreadFunc贴出来看看?
    [/Quote]
      

  11.   

    后台线程最好不要直接操作ui线程的东西
    通过发送消息,由ui消息处理函数里面处理
      

  12.   

    通过断点调试发现能进线程里头,但是线程里面调用的函数是我自己编写的DLL导出函数,所以不能调试到函数里头,  是不是我DLL生成有问题??? 可是我已经测试过没问题后才去生成DLL的
     
    忘各位路过的大牛不吝赐教,各抒己见吧
      

  13.   


    那就用你的DLL工程调试啊
      

  14.   

    如果dll没有问题那可能是AfxGetApp的问题。
    AfxGetApp在线程里有问题。
    CWinApp* pApp = AfxGetApp();
    if(pApp = NULL)
    {
    //
    }CMainFrame *pMain= pApp->m_pMainWnd;if(pMain == NULL)
    {
    //...
    }
    ...
      

  15.   

    如果AfxGetApp有问题,建议把CWinApp*或CMainFrame *作为参数传给线程。另外lz的头像人人心神不宁。