各位大虾:
    我在用vc编一个数据采集的程序,用菜单来控制,我这个采集程序可以连续不停的菜数据,当我用菜单控制其采数据时,在采集的过程中菜单一直处在被选中状态,其他所有的按钮都不响应,我做了一个菜单项来控制采集停止,但是在采数据的过程中“停止键”根本选不中。这是为什么?
   如果我想停止采集就必须关掉整个程序。我该怎样做才能在采数据的过程中其他菜单项也能工作?
   请各位高手帮帮小弟,不胜感激!!!

解决方案 »

  1.   

    用多线程啊要不就用Timer,不然你采集没完没了的,谁也别响应了
      

  2.   

    大家好,
    我现在已经实现了采集部分用辅助线程,在采集的过程中可以进行其它操作。
    但是有出来新的问题:我想边采集边显示,我现使用的是opengl,但是线程控制函数是一个全局函数,把opengl中的图形显示函数放进去,就出这样的错误:*** undeclared identifier。
    另外如果我只把采集有辅助线程来实现,而显示不用,这样在显示的过程中其他菜单项还是不响应,所以怎么样才能把画图部分也放到线程控制函数中。
      

  3.   

    首先谢谢wltg2001(红猪)
    我也这样试过,但是当我把绘图代码放到线程控制函数中后它还是回报错,因为线程控制函数是全局函数。
    下面是绘图的源代码:
             HWND hWnd=GetSafeHwnd();
    HDC hDC=::GetDC(hWnd);
    wglMakeCurrent(hDC,m_hRC);

    glPushMatrix();
    glPointSize(2.0);
    glBegin(GL_POINTS);
    for(j=0;j<1300;j++)//increase width 1 pixel by 1 pixel
    {

    c0[0]=-0.91+(2.0/1300)*j;
    c0[1]=-0.91+(2.0/8)*(log10(data_phys[0][j]*15));

    color[0]=1.0;
    color[1]=0.0;
    color[2]=0.0;

    glColor3dv(color);
    glVertex2dv(c0);


    } glEnd();
    glFlush();
    glBegin(GL_POINTS); for(j=0;j<1300;j++)
    {

    c0[0]=-0.91+(2.0/1300)*j;
    c0[1]=-0.91+(2.0/8)*(log10(data_phys[1][j]*15));

    color[0]=1.0;
    color[1]=1.0;
    color[2]=0.0;

    glColor3dv(color);
    glVertex2dv(c0);


    } glEnd();
    glPopMatrix();
    wglMakeCurrent(NULL,NULL);
    SwapBuffers(hDC);
    glFlush();
    当我把他们放到线程控制函数中后,就出如下错误:
            error C2065: 'GetSafeHwnd' : undeclared identifier
            error C2065: 'm_hRC' : undeclared identifier
    我该怎么办?
      

  4.   

    GetSafeHwnd是CWnd类成员函数,线程控制函数是一个全局函数,所以会出错.
      

  5.   

    谢谢
    但是GetSafeHwnd()函数是opengl绘图必须要用到的。如果不用他就画不出图来。我该怎么做哪?
      

  6.   

    查了一下MSDN,GetSafeHwnd()返回的只是一个窗口句柄,从函数名称上看,这个函数似乎是因为由于CWnd类的指针不稳定而引入的一个安全的返回窗回句柄的函数,应该有相应的API才对,GetSafeHwnd返回的应该是一个普通的窗口句柄,能不能用其它返回窗口句柄的API代替呢?