none
多线程程序在 .NET Framework 出现之前就存在了。 这些程序通常需要一个线程将一个工作单元传递给另一个线程。 Windows 程序围绕消息循环进行,因此很多编程人员使用这一内置队列传递工作单元。 每个要以这种方式使用 Windows 消息队列的多线程程序都必须定义自己的自定义 Windows 消息以及处理约定。 RRS feed

  • 问题

  • 多线程程序在 .NET Framework 出现之前就存在了。 这些程序通常需要一个线程将一个工作单元传递给另一个线程。 Windows 程序围绕消息循环进行,因此很多编程人员使用这一内置队列传递工作单元。 每个要以这种方式使用 Windows 消息队列的多线程程序都必须定义自己的自定义 Windows 消息以及处理约定。

    加粗的部分是什么意思?谁能详细解释一下


    please verify my account

    2016年12月27日 6:51

答案

  • Hi lctk,

    在window 32编程里面,我们知道每个消息都是对应一个执行函数。这也是早期程序员的想法,我接收一个独一无二的消息,执行这个独一无二的函数。 这就是最简单的消息传递。

    所以就会把消息和执行函数放到一个结构体里面。在windows里面就是这个MSG structure。  

    在windows 编程下面,大多都是有图形界面,每个图形都有自己一个独一无二的handle。 所以程序在分发消息的时候,是会根据这个句柄把消息发送给谁。如果有很多界面,那么就会产出很多消息需要处理,这样形成了消息的循环和消息处理。

    系统是不会自动的创建消息循环为每个线程。相反,系统会为需要执行消息的线程而创建消息循环队列。消息队列其实就是在一个消息队列线程里面。我们用getmessage获取到消息,然后分发这些消息。

    希望我的回复能帮助到你,不知道表达的清不清楚

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 lctk 2016年12月30日 5:44
    2016年12月28日 2:11
    版主

全部回复

  • Hi lctk,

    在window 32编程里面,我们知道每个消息都是对应一个执行函数。这也是早期程序员的想法,我接收一个独一无二的消息,执行这个独一无二的函数。 这就是最简单的消息传递。

    所以就会把消息和执行函数放到一个结构体里面。在windows里面就是这个MSG structure。  

    在windows 编程下面,大多都是有图形界面,每个图形都有自己一个独一无二的handle。 所以程序在分发消息的时候,是会根据这个句柄把消息发送给谁。如果有很多界面,那么就会产出很多消息需要处理,这样形成了消息的循环和消息处理。

    系统是不会自动的创建消息循环为每个线程。相反,系统会为需要执行消息的线程而创建消息循环队列。消息队列其实就是在一个消息队列线程里面。我们用getmessage获取到消息,然后分发这些消息。

    希望我的回复能帮助到你,不知道表达的清不清楚

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 lctk 2016年12月30日 5:44
    2016年12月28日 2:11
    版主
  • Hi,这些程序通常需要一个线程将一个工作单元传递给另一个线程

    请问在上文中的工作单元是什么意思?


    please verify my account


    • 已编辑 lctk 2016年12月28日 7:00
    2016年12月28日 6:59
  • Hi,

    AspNetSynchronizationContext (System.Web.dll:System.Web [internal class]) ASP.NET SynchronizationContext 在线程池线程执行页面代码时安装在上面。当委托列对到捕获的 AspNetSynchronizationContext 中时,它恢复原始页面的标识和区域,然后直接执行委托。即使委托是通过调用 Post“异步”列队的,也会直接调用委托。

    从概念上讲,AspNetSynchronizationContext 的上下文非常复杂。在异步页面的生存期中,该上下文从来自 ASP.NET 线程池的一个线程开始。异步请求开始后,该上下文不包含任何线程。异步请求结束时,执行其完成例程的线程池线程进入该上下文。这些可能是启动请求的线程,但更可能是操作完成时处于空闲状态的任何线程。

    如果同一应用程序的多项操作同时完成,AspNetSynchronizationContext 确保一次只执行其中一项。它们可以在任意线程上执行,但该线程将具有原始页面的标识和区域。

    一个常见的示例是在异步网页中使用 WebClient。DownloadDataAsync 将捕获当前 SynchronizationContext,之后在该上下文中执行其 DownloadDataCompleted 事件。当页面开始执行时,ASP.NET 会分配它的一个线程执行该页面中的代码。该页面可能调用 DownloadDataAsync,然后返回;ASP.NET 对未完成的异步操作进行计数,以便了解页面是否完成。当 WebClient 对象下载所请求的数据后,它将接收到一个线程池线程的通知。此线程将在捕获的上下文中引发 DownloadDataCompleted。该上下文将保持在相同的线程中,但会确保事件处理程序使用正确的标识和区域运行。

    请问加粗的部分是什么意思?

    该线程将具有原始页面的标识和区域。

    原始页面的标识和区域

    是什么意思?


    please verify my account

    2016年12月28日 7:35
  • Hi,这些程序通常需要一个线程将一个工作单元传递给另一个线程

    请问在上文中的工作单元是什么意思?


    please verify my account


    这个工作单元,我理解应该是自己写的一个功能,去传递消息的。

    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年12月28日 9:38
    版主
  • Hi,

    >>" 原始页面的标识和区域 "

    这种MSDN文档中记载的东西。你可以在文档链接下面写feedback.这样写这个文档的人,就会回复你,毕竟写文档的人比较熟悉。

    我们使用者都是片面的理解,有可能会误导你。

    希望你能谅解。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年12月28日 9:41
    版主