`
yuanlanxiaup
  • 浏览: 896285 次
文章分类
社区版块
存档分类
最新评论

带有消息机制的线程 - CustomMessageQueue

 
阅读更多

调用方法:

PublicClassForm1ClassForm1
PrivatemyMsgQueueAsCustomMessageQueue
PrivateSubButton1_Click()SubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimmsgAsNewCustomMessage
msg.Message
=1
msg.param
=NewString("我的自定义消息ID:1")
CustomMessageQueue.PostMessage(myMsgQueue,msg)
EndSub


PrivateSubButton2_Click()SubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
DimmsgAsNewCustomMessage
msg.Message
=2
myMsgQueue.PostMessage(msg)
EndSub


PrivateSubForm1_FormClosing()SubForm1_FormClosing(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.Forms.FormClosingEventArgs)HandlesMyBase.FormClosing
myMsgQueue.PostQuitMessage()
EndSub


PrivateSubForm1_Load()SubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
myMsgQueue
=NewCustomMessageQueue()
myMsgQueue.StartThread()
myMsgQueue.PerTranslateMessage
=NewCustomMessageQueue.PerTranslateMessageHandler(AddressOfCustomMessageProc)
EndSub


PrivateFunctionCustomMessageProc()FunctionCustomMessageProc(ByRefmAsCustomMessage)AsBoolean
Ifm.Message=1Then
MessageBox.Show(
"我拦截到id=1的消息了。并且,就到此为止了。呵呵")
ReturnTrue
Else
MessageBox.Show(m.Message.ToString)
EndIf
ReturnFalse
EndFunction

EndClass

自己的消息机制线程类

PublicStructureCustomMessageStructureCustomMessage
PublicMessageAsInteger
PublicparamAsObject
EndStructure


PublicClassCustomMessageQueueClassCustomMessageQueue
PrivatethAsThreading.Thread
PublicMsgAsNewCustomMessage
PublicDelegateFunctionPerTranslateMessageHandler()FunctionPerTranslateMessageHandler(ByRefmAsCustomMessage)AsBoolean
PublicPerTranslateMessageAsPerTranslateMessageHandler

PublicSharedSubPostMessage()SubPostMessage(ByRefmsgQueueAsCustomMessageQueue,ByRefmAsCustomMessage)
msgQueue.Msg
=m
Threading.Monitor.Enter(msgQueue)
Threading.Monitor.Pulse(msgQueue)
Threading.Monitor.Exit(msgQueue)
EndSub


PublicSubPostMessage()SubPostMessage(ByRefmAsCustomMessage)
Msg
=m
Threading.Monitor.Enter(
Me)
Threading.Monitor.Pulse(
Me)
Threading.Monitor.Exit(
Me)
EndSub


PublicSubPostQuitMessage()SubPostQuitMessage()
Msg.Message
=-1
Threading.Monitor.Enter(
Me)
Threading.Monitor.Pulse(
Me)
Threading.Monitor.Exit(
Me)
EndSub


PrivateSubThreadProc()SubThreadProc()
WhileMsg.Message<>-1'enum-1forexitthread
If(Msg.Message<>0)Then
IfNotPerTranslateMessageIsNothingThen
IfPerTranslateMessage.Invoke(Msg)Then
Msg.Message
=0'Setmessagetounused
Threading.Monitor.Enter(Me)
Threading.Monitor.Wait(
Me)
Threading.Monitor.Exit(
Me)
ContinueWhile
EndIf
EndIf
DefaultMessageTranslate()
EndIf
Threading.Monitor.Enter(
Me)
Threading.Monitor.Wait(
Me)
Threading.Monitor.Exit(
Me)
EndWhile
EndSub


PrivateSubDefaultMessageTranslate()SubDefaultMessageTranslate()
'以下可以定义默认的消息处理,可以封装成自己要用的
SelectCaseMsg.Message
Case1'我自己定义,1表示显示消息号或消息的解释
IfNotMsg.paramIsNothingOrElseTypeOfMsg.paramIsStringThen
MessageBox.Show(
DirectCast(Msg.param,String))
Else
DimstrMsgAsString=String.Format("{0:d}",Msg.Message)
MessageBox.Show(strMsg)
EndIf
EndSelect
Msg.Message
=0'Setmessagetounused
EndSub


PublicSubNew()SubNew()
th
=NewThreading.Thread(AddressOfThreadProc)
PerTranslateMessage
=Nothing
EndSub


PublicSubStartThread()SubStartThread()
Try
th.Start()
Catch
DimnLayerAsInteger=GC.GetGeneration(th)
GC.Collect(nLayer)
th
=NewThreading.Thread(AddressOfThreadProc)
th.Start()
EndTry
EndSub

EndClass

带有消息机制的线程 - CustomMessageQueue (vb.net/c# 两种版本的源码)

分享到:
评论

相关推荐

    vc++ multithread多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区

    以上四种线程同步机制各有其适用场景,开发者应根据具体需求选择合适的工具。例如,事件对象适合于线程间的复杂通信和协调,信号量可以控制资源的并发访问数量,互斥量适合于独占资源的访问,而临界区则适用于保护小...

    (八)线程--借助 封装类 实现“线程调用带参数方法”

    (八)线程--借助 封装类 实现“线程调用带参数方法”

    Java多线程-线程的安全问题与线程的同步机制介绍

    Java多线程-线程的安全问题与线程的同步机制介绍 在 Java 多线程编程中,线程安全问题是非常重要的一个话题。当多个线程访问同一个资源时,如果只有读操作那么不会出现线程安全问题,但是如果多个线程对资源进行读...

    Android的消息处理机制--Message,MessageQueue

    Android的消息处理机制是其架构设计的重要组成部分之一,它确保了应用程序能够在多线程环境下高效稳定地运行。通过合理使用Message、MessageQueue、Handler和Looper,开发者可以轻松地实现线程间的通信,从而提升...

    Android的消息处理机制--Looper,Handler

    在Android系统中,消息处理机制是至关重要的,它允许开发者在不同的线程间进行通信,尤其是主线程(UI线程)与其他工作线程之间。这一机制主要涉及到两个关键组件:`Looper`和`Handler`。下面我们将深入探讨这两个...

    线程及消息机制

    ### 线程及消息机制在嵌入式WinCE中的应用 #### 1. 嵌入式WinCE概述 嵌入式WinCE系统是一种基于Windows内核的实时操作系统,适用于移动设备、工业控制和其他嵌入式应用领域。WinCE支持多任务处理,并且提供了丰富...

    操作系统实验-----MFC线程--购票系统演示

    操作系统实验中的“MFC线程--购票系统演示”是一个典型的多线程编程示例,它主要涉及了C++编程语言中的Microsoft Foundation Classes (MFC)库,以及操作系统层面的线程管理和线程同步概念。MFC是微软提供的一套面向...

    java多线程机制 -- 源码详解

    在Java中,创建线程有两种主要方式:继承Thread类和实现Runnable接口。 在例子1中,我们看到一个简单的多线程示例。主类Example1创建了两个线程,lefthand和righthand,分别由Lefthand和Righthand类的实例化对象...

    js多线程--很好用的东东

    标题“js多线程--很好用的东东”暗示我们将讨论JavaScript中的多线程解决方案,这可能包括Web Workers、Service Workers或其他相关技术。这些技术允许JavaScript在后台运行额外的线程,以便在不影响主线程的情况下...

    操作系统-创建多线程-读者写者

    这个问题描述了一个场景:多个线程试图读取共享资源,同时可能有一个或多个线程试图修改这个资源。为了保证数据的一致性,需要确保当有写操作正在进行时,其他所有读和写操作都不能访问资源;而当没有写操作时,可以...

    java多线程同步问题

    多线程注意:wait()方法的调用要有判定条件常用 while () obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的执行不会有规律了!

    windows的多线程消息机制

    Windows的多线程消息机制是操作系统提供的一种处理并发任务的方式,尤其在开发MFC应用程序时,理解这一机制至关重要。在Windows环境下,线程是程序执行的独立单元,每个线程都有自己的消息队列,用于接收和处理来自...

    Java多线程-同步机制解决线程安全问题方式一:同步代码块

    - 识别线程安全问题:首先确定哪部分代码是多线程运行的,然后判断是否存在共享数据,最后看是否有多个线程同时操作共享数据。 - 解决线程安全问题:将操作共享数据的代码放入同步范围内,确保同一时间只有一个线程...

    Java多线程-多线程知识点总结和企业真题

    6. **线程的同步机制带来的问题:死锁**: - 发生死锁时,两个或多个线程各自持有一个资源但又等待对方释放资源。 - 解决方法:避免循环等待、使用超时机制等。 7. **Lock的使用**: - 使用`ReentrantLock`类来...

    vc多线程-mfc-大家可以看看

    本文将深入探讨MFC如何支持多线程,并基于标题"vc多线程-mfc-大家可以看看"及描述"vc多线程-mfc-大家可以看看这是第二部分"来阐述相关知识点。 首先,理解多线程的概念是至关重要的。多线程是指在一个进程中...

    C#内存释放-线程控制-线程启动-线程暂停

    本文将深入探讨“C#内存释放-线程控制-线程启动-线程暂停”这一主题,结合提供的WFormsThread文件,我们可以假设这是一个关于Windows Forms应用程序中线程管理的实例。 首先,让我们关注线程控制。在C#中,我们通常...

    RabbitMQ实战-多线程-springboot-rabbit.zip

    在本项目"RabbitMQ实战-多线程-springboot-rabbit.zip"中,我们将深入探讨如何使用RabbitMQ作为消息中间件,结合Spring Boot框架和多线程技术来实现高效、可扩展的分布式系统。Spring Boot简化了RabbitMQ的集成,而...

    RT-Thread线程-创建线程

    5. **线程同步与通信**:RT-Thread提供了多种线程间同步和通信机制,如信号量、互斥锁、消息队列等。这些机制允许线程协同工作,避免资源冲突,提高系统效率。 6. **调试与优化**:利用RT-Thread Studio的调试工具...

Global site tag (gtag.js) - Google Analytics