`
gstarwd
  • 浏览: 1525179 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

VC++线程通信

    博客分类:
  • VC++
阅读更多
 

这是我现在使用的一种线程通信方式的代码片段,两个线程之间通过自定义消息进行通知 ,


#define  MY_MSG WM_USER+100  // 线程通信的自定义消息
// 消费者
DWORD Consumer::Run()
{ // 创建线程并启动
    DWORD ThreadId;
    m_hThread 
=  CreateThread( NULL, 0 ,Routine, 0 , 0 , & ThreadId ); // 创建更新线程
     if ( NULL  ==  m_hThread )
    
{
        
return   - 1 ; // 启动失败
    }


    
return  ThreadId; // 线程启动成功
}


DWORD WINAPI Consumer::Routine( LPVOID lParam)
{ // 线程运行函数
    std::cout << " 消费者线程启动 \n " ;
    MSG msg;
    PeekMessage(
& msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

    
while ( true )
    
{
        
if (GetMessage( & msg, 0 , 0 , 0 ))  // get msg from message queue
         {
            
switch (msg.message)
            
{
            
case  MY_MSG:
                
// do something here
                std::cout << " 收到消息 " << std::endl;
                
break ;
            }

        }

    }
;
    
return   0 ;
}

// 生产者
DWORD Producer::Run(LPDEALFUNCTION dealfun,LPVOID lParam)
{
    DWORD ThreadId;
    m_DealFun 
=  dealfun;
    m_DealFunParam 
=  NULL;
    m_hThread 
=  CreateThread( NULL, 0 ,Routine, this , 0 , & ThreadId ); // 创建监控线程
     if ( NULL  ==  m_hThread )
    
{
        
return   - 1 ;
    }

    
return  ThreadId;
}


DWORD WINAPI Producer::Routine( LPVOID lParam )

    Producer
&  obj  =   * (Producer * )lParam; // 生产者对象

    
while ! obj.m_bRequestStop )
    
{ // 线程就不断运行直到收到用户的退出请求
        obj.m_DealFun(obj.m_DealFunParam );
    }

    
return   0 ;
}

// main.cpp
HANDLE hStartEvent;  //  thread start event
unsigned nConsumerID,nProducerID;

void  __stdcall MyDeal( LPVOID lParam )
{
    std::cout
<< " 开始发送消息.. " << std::endl;

    
if ( ! PostThreadMessage(nConsumerID,MY_MSG,NULL,NULL)) // post thread msg
     {
        printf(
" post message failed,errno:%d\n " ,::GetLastError());
    }

    ::Sleep(
1000 );
}

int  main()
{
    Consumer consumer;
    nConsumerID 
=  consumer.Run(); // 启动更新线程

    
if (nConsumerID  ==   - 1 )
    
{
        std::cout
<< " start thread failed " << std::endl;
        
return   - 1 ;
    }


    Producer pProducer;
    nProducerID 
=  pProducer.Run( & MyDeal,  0  ); // 启动监控线程
     if ( nProducerID ==- 1  )
        
return   - 1 ;

    
return   0 ;
}


分享到:
评论

相关推荐

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

    本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...

    归纳整理的VC++串口通信20个经典源码合集.zip

    VC++串口通信20个经典源码合集: .\VC 串口通信程序.rar .\VC 读串口话是动态波形,非常好的应用程序,有源码.rar .\VC++ 串口实现双机互联 包含视窗加代码.rar .\VC++ 串口通信,可以收发数据,可选用TCPIP 通信.rar ....

    vc++网络通信编程实用案例精选

    总的来说,"VC++网络通信编程实用案例精选"可能会包含一系列这样的示例,涵盖了从基本的TCP连接到复杂的多线程服务器设计。通过学习这些案例,开发者可以更好地理解和掌握如何在VC++环境中利用Winsock进行网络通信...

    MFC、VC++实时通信与串行通信

    总结来说,MFC和VC++的实时通信与串行通信技术是构建复杂应用程序的基础,涵盖了网络通信、设备交互、多线程编程等多个方面,对于提升系统的效率和用户体验具有至关重要的作用。开发者需要深入理解这些概念和技术,...

    多线程技术在VC++串口通信程序中的应用研究

    ### 多线程技术在VC++串口通信程序中的应用研究 #### 一、引言 随着计算机技术的发展,多线程技术已成为提高系统性能的关键手段之一。在串口通信领域,合理运用多线程技术可以有效提升数据传输效率及程序响应能力...

    vc++ 语音通信 语音电话

    本文将深入探讨基于VC++实现的点对点语音通信技术,尤其是利用G.729协议进行语音压缩的源码实现。 首先,让我们理解什么是点对点(P2P)通信。在计算机网络中,点对点通信是指两个或多个设备之间直接交换数据,而...

    【转】多线程技术在VC++串口通信程序中的应用研究

    标题中的“多线程技术在VC++串口通信程序中的应用研究”暗示了这篇内容将探讨如何在使用Microsoft Visual C++(VC++)开发的串口通信程序中利用多线程技术来提升程序的效率和性能。串口通信是设备间进行数据交换的一...

    vc++ 线程同步与异步套接字编程实例

    vc++ 线程同步与异步套接字编程实例,Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非...

    《VC++网络通信编程实例案例精选》源代码 第二部分

    总之,《VC++网络通信编程实例案例精选》的第二部分源代码提供了丰富的实践材料,涵盖了从基础的套接字编程到高级的并发处理和多线程技术,是学习VC++网络编程的宝贵资源。通过学习和实践这些案例,读者能够深入理解...

    VC++网络通信编程实例案例精选

    "VC++网络通信编程实例案例精选"很可能是一个集合了多种网络通信编程示例的资源,旨在帮助开发者通过实际案例学习和掌握这项技能。 首先,我们来讨论一下VC++中的网络编程基础。VC++提供了一些库和API,如Winsock...

    VC++串口通信20个经典源码合集

    《VC++串口通信经典源码解析》 在IT领域,串口通信是设备间进行数据交换的一种常见方式,尤其在嵌入式系统和工业控制中广泛应用。VC++作为Microsoft提供的强大开发工具,支持多种编程接口,使得串口通信变得简单易...

    《VC++网络通信编程实例案例精选》光盘源代码

    《VC++网络通信编程实例案例精选》是一本深入探讨如何使用VC++进行网络通信编程的专业书籍。这本书通过实例的方式,让读者能够理解并掌握网络通信编程的核心技术。光盘源代码包含了书中第三部分第六节的所有实例,为...

    VC++串口通信经典VC++源码合集

    总的来说,这个"VC++串口通信经典源码合集"是一个宝贵的资源,涵盖了串口通信的各个方面,包括基础操作、数据处理、多线程编程和网络通信的结合。对于想要学习或提升VC++串口通信技能的开发者来说,这是一个不可多得...

    《VC++网络通信编程实例案例精选》源代码 第一部分

    总的来说,这个压缩包提供的源代码涵盖了VC++网络通信编程的核心概念,包括基础的TCP/IP通信、套接字编程、多线程处理和UDP通信。通过学习和实践这些案例,开发者可以提升在网络编程领域的技能,尤其在设计和实现高...

    vc++串口通信技术书籍

    《VC++串口通信技术书籍》是一本专为VC++开发者设计的深度学习资源,它深入探讨了在VC++环境中实现串口通信的各种技术和实践。串口通信是计算机通信领域中的一个重要部分,尤其是在嵌入式系统、自动化设备以及工业...

    VC++多线程编程实例

    4. **线程通信**: 线程间通信可以通过消息队列、共享内存、管道或事件对象等方式实现。在MFC中,可以使用PostThreadMessage函数将消息从一个线程发送到另一个线程的消息队列。 5. **线程生命周期管理**: 创建...

    基于VC++6.0MFC的多线程通信技术研究

    本论文以陕西省自然科学基金项目(2001年度)—软件逆向工程技术研究为背景,提出了一种软件再设计(redesign)方法,它以面向对象的分析和设计为指导,详述了Windows编程的一个应用领域:多线程通信技术。基于微软基础...

    VC++多线程/进程编程实例(2)(4个实例-附源代码)

    在本文中,我们将深入探讨由标题“VC++多线程/进程编程实例(2)(4个实例-附源代码)”所涵盖的VC++编程技术。这个资源提供了四个具体的实例,旨在帮助开发者理解如何在VC++环境中进行多线程和多进程编程,以及线程...

Global site tag (gtag.js) - Google Analytics