none
线程函数调用问题 RRS feed

  • 问题

  • 我在MFC初始化的创建了线程: AA = CreateThread(NULL, 0, TGS, NULL, 0, NULL); 然后我响应了两个按钮控件函数,当我点击第一个按钮控件时我想执行线程函数:TGS(), 并且在TGS() 执行期间我想点击第二个按钮控件去执行第二个按钮控件函数,要怎么做才能完成这个效果?

    我之前试过在第一个按钮控件函数里直接调用线程函数: TGS(); 但是要等到该线程函数执行完才能继续响应其他控件消息,这不是我要的效果,请高手帮帮忙,谢谢!

    2014年10月23日 4:48

答案

  • 取决您线程函数,比如您的线程的实现如下所示:
    DWORD WINAPI ThreadProc(LPVOID lParam)
    {
      MSG msg;
      BOOL bExitThread = FALSE;
      while(!bExitThread && GetMessage(&msg, NULL, 0, 0))
      {
        switch(msg.message)
        {
            case MSG_DOSOMETHING: // 您可以利用PostThreadMessage给该线程发送消息,让线程做事情
             // TODO:
            break;
            case MSG_EXIT:  //  发送消息给线程,让线程退出
             bExitThread = TRUE;
             break;
           default:
              break;
        }
      }
      return 0;
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.


    2014年10月28日 15:14
    版主

全部回复

  • 你好,

    你可以考虑用异步多线程模式实现。具体实现方式需要你先了解清楚里面的机制自己试着实现。

    http://blogs.msdn.com/b/andrewarnottms/archive/2014/05/07/asynchronous-and-multithreaded-programming-within-vs-using-the-joinabletaskfactory.aspx

    http://www.cnblogs.com/zjjcy/archive/2012/03/25/2416700.html

    May


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年10月23日 9:31
  • 取决您线程函数,比如您的线程的实现如下所示:
    DWORD WINAPI ThreadProc(LPVOID lParam)
    {
      MSG msg;
      BOOL bExitThread = FALSE;
      while(!bExitThread && GetMessage(&msg, NULL, 0, 0))
      {
        switch(msg.message)
        {
            case MSG_DOSOMETHING: // 您可以利用PostThreadMessage给该线程发送消息,让线程做事情
             // TODO:
            break;
            case MSG_EXIT:  //  发送消息给线程,让线程退出
             bExitThread = TRUE;
             break;
           default:
              break;
        }
      }
      return 0;
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.


    2014年10月28日 15:14
    版主