`
BabyDuncan
  • 浏览: 584307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程之间通信的三种方法

    博客分类:
  • J2SE
阅读更多
线程间通信的三种方法:
多线程通信的方法主要有以下三种:

1.全局变量
进程中的线程间内存共享,这是比较常用的通信方式和交互方式。

注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。


2.Message消息机制

常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage,

PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。
2.1.PostMessage()
函数原型:

    B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
参数:
    hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
    HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口
和弹出式窗口。消息不被寄送到子窗口。
    NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。
    Msg:指定被寄送的消息。
    wParam:指定附加的消息特定的信息。
    IParam:指定附加的消息特定的信息。
    返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。

MS还提供了SendMessage方法进行消息间通讯,SendMessage(),他和PostMessage的区别是:
SendMessage是同步的,而PostMessage是异步的。SendMessage必须等发送的消息执行之后,才返回。

2.2.PostThreadMessage()
PostThreadMessage方法可以将消息发送到指定线程。

函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);
参数除了ThreadId之外,基本和PostMessage相同。

目标线程通过GetMessage()方法来接受消息。
注:使用这个方法时,目标线程必须已经有自己的消息队列。否则会返回ERROR_INVALID_THREAD_ID错误。可以用
PeekMessage()给线程创建消息队列。

3.CEvent对象
CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。
分享到:
评论

相关推荐

    多线程之间的线程通信

    然而,多线程通信也存在潜在的危险。其中最常见的问题是**竞态条件(Race Condition)**,即多个线程同时访问并修改同一数据,导致结果不可预测。另一个问题是**死锁(Deadlock)**,即两个或更多线程相互等待对方释放...

    Qt线程之间通信、线程和进程之间通信实例

    在编程领域,多线程和多进程是提升应用程序性能和响应速度的重要手段。Qt库,一个跨平台的应用程序开发框架,提供了丰富的API来支持线程和进程间的通信。本实例将深入探讨Qt如何实现线程间通信以及线程与进程间通信...

    qt 中 多线程tcp通信

    首先,标题"qt 中 多线程tcp通信"表明我们要在Qt环境中实现TCP(Transmission Control Protocol)的多线程通信。TCP是一种面向连接的、可靠的传输协议,确保数据的顺序传输和错误检查。在多线程环境下,我们可以将...

    操作系统中多线程之间通信

    在本文中,我们将深入探讨多线程通信的重要性、常见方法以及如何解决经典的问题——读者写者问题。 首先,多线程通信(Inter-Thread Communication, ITC)是多线程编程中的关键部分,它涉及到线程间的同步和异步...

    java多线程通信图解

    java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...

    线程的几种控制方式以及线程间的几种通信方式

    4. **线程间通信**:线程间通信允许线程之间交换信息,Java提供了多种机制,如`wait()`, `notify()`, `notifyAll()`,Python中则有`Condition`对象。 5. **线程休眠**:Java的`Thread.sleep()`方法可以让线程暂停...

    多线程通信和等待机制.docx

    多线程通信和等待机制是多线程编程中一个重要的概念,它们都是基于线程之间的同步和协作来实现的。其中,wait()和notify()方法是Java语言中实现多线程通信和等待机制的两个核心方法。 wait()方法是Object类的一个...

    多线程之间消息通信

    在计算机编程中,多线程是并发执行任务的一种方式,特别是在多核处理器系统中,它能有效利用资源,提高程序的执行效率。然而,当多个线程需要共享数据或协调工作时,线程间的通信就变得至关重要。"多线程之间消息...

    多线程通信ThreadDemo

    在Java编程中,多线程通信是一个重要的概念,特别是在并发编程中。`ThreadDemo`示例可能演示了如何在不同的线程之间有效地传递信息。线程通信是解决多个执行流同步和协作的关键,确保数据的一致性和正确性。以下是...

    C#线程间通信

    采用的是C#的Winform开发,提供了两种线程交互的方式。 第一:在主线程中开启两个子线程,子线程用事件方式来进行通信。对于主线程的控件操作采用的是delegate委托的方式,避免主线程假死。 第二:采用的是...

    串口通信及多线程之间通信

    多线程通信是另一个重要的主题,尤其在复杂的软件系统中。当一个程序需要执行多个任务并行时,多线程技术就显得尤为重要。在QT5中,QThread类被用来创建和管理线程。每个QThread对象代表一个独立的执行线程。然而,...

    MFC多线程之间通信

    MFC多线程之间的通信:本程序通过2个示例展示了通过自定义消息在多线程之间传递消息。

    基于MFC开发的多线程串口通信上位机

    **三、多线程技术** 在开发串口通信上位机时,多线程技术是必不可少的。多线程允许程序同时执行多个任务,提高程序的并发性和响应性。在MFC中,可以使用CWinThread类创建新的线程。每个线程可以独立处理读取串口...

    3种多线程实现同步方法

    本篇文章将深入探讨三种在C++中实现多线程同步的方法:事件对象、关键代码段和互斥对象。 首先,我们来看**事件对象**。事件对象是一种信号机制,用于线程间通信和同步。在Windows API中,CreateEvent函数创建一个...

    线程间通信方式3:消息传递方式

    4. **三种线程通信方式结合**: - 在这个示例中,可能结合了同步和异步消息传递、事件对象(如事件句柄)以及信号量等机制。 - 同步消息传递:等待消息被处理后再继续执行,如SendMessage。 - 异步消息传递:发送...

    多线程udp通信

    在IT领域,多线程UDP通信是一个重要的主题,特别是在开发高效、实时的网络应用程序时。在Windows Forms(Winform)环境中,多线程技术结合用户界面(UI)和网络通信可以提升程序性能,避免UI线程阻塞,提高用户体验...

    VS2017实现Tcp socket多线程通信(C++)

    在本文中,我们将深入探讨如何使用Visual Studio 2017和C++来实现TCP套接字的多线程通信。TCP(传输控制协议)是一种面向连接、可靠的、基于字节流的通信协议,广泛应用于互联网上的各种服务。多线程技术则允许我们...

    MFC线程间通信

    在编程领域,多线程应用是提升程序性能和并发处理能力的重要手段。然而,当一个应用程序中有多个线程运行时,它们可能需要共享数据或协调工作,这就涉及到线程间通信(Inter-Thread Communication,简称ITC)。MFC...

    C++实现多线程通信

    在C++编程中,多线程通信是并发执行任务时必不可少的一个环节,它涉及到线程间的同步和数据共享。在本篇文章中,我们将深入探讨如何在C++中实现多线程通信,以及相关的同步机制和数据交换策略。 一、线程创建与管理...

    计算机网络多线程通信简例

    在计算机科学领域,尤其是软件开发中,多线程通信是一个重要的概念,特别是在处理并发任务和优化性能时。本文将深入探讨计算机网络中的多线程通信,以Java编程语言为例,结合"MT_WebServer"这一文件,来阐述如何实现...

Global site tag (gtag.js) - Google Analytics