Multithreading 有没有办法在MFC中为视图设置线程?

Multithreading 有没有办法在MFC中为视图设置线程?,multithreading,view,mfc,Multithreading,View,Mfc,我知道MFC在这里不是一个受欢迎的主题,但我还是在为平台寻找建议 我有一个多线程的MFC应用程序,它也经常使用onIdle,我们想在应用程序中添加一个绘图功能,在我们的例子中是PGL。当然,一旦它添加了,主要是因为onIdle,情节会闪烁 所以我在考虑用一条线来观察情节。但不知道如何进行。我相信我需要有ui线程,因为它应该会收到一些消息。如果您能给我任何建议,我将不胜感激。请从onIdle带走所有的东西。onIdle中的Stuff='停止处理UI消息'。里面有什么 从onIdle中取出所有的东西

我知道MFC在这里不是一个受欢迎的主题,但我还是在为平台寻找建议

我有一个多线程的MFC应用程序,它也经常使用onIdle,我们想在应用程序中添加一个绘图功能,在我们的例子中是PGL。当然,一旦它添加了,主要是因为onIdle,情节会闪烁


所以我在考虑用一条线来观察情节。但不知道如何进行。我相信我需要有ui线程,因为它应该会收到一些消息。如果您能给我任何建议,我将不胜感激。

请从onIdle带走所有的东西。onIdle中的Stuff='停止处理UI消息'。里面有什么

从onIdle中取出所有的东西。onIdle中的Stuff='停止处理UI消息'。里面有什么

这里可能有两件事混在一起:

  • 为图形使用单独的线程可能是一个好主意(很难从您的描述中看出),但可能是不必要的。除非您的UI由于绘图功能而变得无响应或迟钝,否则不太可能有任何好处

  • 如果您的问题是闪烁,这是一个完全不同的问题,通常最好通过双缓冲打印来解决-将图形绘制到内存设备上下文,然后在完成后,将该数据(或最好只是更新的部分)复制到屏幕


  • 在这里,您可能会遇到一些问题:

  • 为图形使用单独的线程可能是一个好主意(很难从您的描述中看出),但可能是不必要的。除非您的UI由于绘图功能而变得无响应或迟钝,否则不太可能有任何好处

  • 如果您的问题是闪烁,这是一个完全不同的问题,通常最好通过双缓冲打印来解决-将图形绘制到内存设备上下文,然后在完成后,将该数据(或最好只是更新的部分)复制到屏幕

  • 该示例演示了一个MFC用户界面线程,其中用户 接口事件在独立于主线程的单独线程中处理 应用程序线程。此示例是的修改版本 单螺纹样品

    该示例演示了一个MFC用户界面线程,其中用户 接口事件在独立于主线程的单独线程中处理 应用程序线程。此示例是的修改版本 单螺纹样品


    OnIdle仅停止处理id为的消息一次OnIdle运行很长。仅当消息队列为空时才会执行OnIdle()。感谢您的回答。我无法摆脱OnIdle的东西,因为这个实时应用程序在那里做必要的事情。但我发现UpdateAllViews在OnIdle中被调用,这就是闪烁的原因。OnIdle停止处理消息只有一个id OnIdle运行很长。仅当消息队列为空时才会执行OnIdle()。感谢您的回答。我无法摆脱OnIdle的东西,因为这个实时应用程序在那里做必要的事情。但我发现UpdateAllViews是在OnIdle中调用的,这就是闪烁的原因。正如我所说,闪烁是由于应用程序类中的OnIdle例程引起的。STLL认为视图绘图的线程是不必要的?根据你在这里所说的以及对另一个答案的回应,我认为单独的线程是不必要的,并且会增加很多复杂性,而不一定解决闪烁问题。实际上,并不是UpdateAllViews导致了闪烁,而是它正在更新的视图中的绘图代码导致了闪烁。这是一个微妙的区别,但却是一个重要的区别。如果你对视图进行了双重缓冲,那么无论你更新视图的频率有多高,视图都不会闪烁。你是对的。正如我所说,闪烁是由于应用程序类中的OnIdle例程造成的。STLL认为视图绘图的线程是不必要的?根据你在这里所说的以及对另一个答案的回应,我认为单独的线程是不必要的,并且会增加很多复杂性,而不一定解决闪烁问题。实际上,并不是UpdateAllViews导致了闪烁,而是它正在更新的视图中的绘图代码导致了闪烁。这是一个微妙的区别,但却是一个重要的区别。如果你对视图进行了双重缓冲,那么无论你更新视图的频率有多高,视图都不会闪烁。你是对的。