这是我现在使用的一种线程通信方式的代码片段,两个线程之间通过自定义消息进行通知
,
#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++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...
VC++串口通信20个经典源码合集: .\VC 串口通信程序.rar .\VC 读串口话是动态波形,非常好的应用程序,有源码.rar .\VC++ 串口实现双机互联 包含视窗加代码.rar .\VC++ 串口通信,可以收发数据,可选用TCPIP 通信.rar ....
总的来说,"VC++网络通信编程实用案例精选"可能会包含一系列这样的示例,涵盖了从基本的TCP连接到复杂的多线程服务器设计。通过学习这些案例,开发者可以更好地理解和掌握如何在VC++环境中利用Winsock进行网络通信...
总结来说,MFC和VC++的实时通信与串行通信技术是构建复杂应用程序的基础,涵盖了网络通信、设备交互、多线程编程等多个方面,对于提升系统的效率和用户体验具有至关重要的作用。开发者需要深入理解这些概念和技术,...
### 多线程技术在VC++串口通信程序中的应用研究 #### 一、引言 随着计算机技术的发展,多线程技术已成为提高系统性能的关键手段之一。在串口通信领域,合理运用多线程技术可以有效提升数据传输效率及程序响应能力...
本文将深入探讨基于VC++实现的点对点语音通信技术,尤其是利用G.729协议进行语音压缩的源码实现。 首先,让我们理解什么是点对点(P2P)通信。在计算机网络中,点对点通信是指两个或多个设备之间直接交换数据,而...
标题中的“多线程技术在VC++串口通信程序中的应用研究”暗示了这篇内容将探讨如何在使用Microsoft Visual C++(VC++)开发的串口通信程序中利用多线程技术来提升程序的效率和性能。串口通信是设备间进行数据交换的一...
vc++ 线程同步与异步套接字编程实例,Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非...
总之,《VC++网络通信编程实例案例精选》的第二部分源代码提供了丰富的实践材料,涵盖了从基础的套接字编程到高级的并发处理和多线程技术,是学习VC++网络编程的宝贵资源。通过学习和实践这些案例,读者能够深入理解...
"VC++网络通信编程实例案例精选"很可能是一个集合了多种网络通信编程示例的资源,旨在帮助开发者通过实际案例学习和掌握这项技能。 首先,我们来讨论一下VC++中的网络编程基础。VC++提供了一些库和API,如Winsock...
《VC++串口通信经典源码解析》 在IT领域,串口通信是设备间进行数据交换的一种常见方式,尤其在嵌入式系统和工业控制中广泛应用。VC++作为Microsoft提供的强大开发工具,支持多种编程接口,使得串口通信变得简单易...
《VC++网络通信编程实例案例精选》是一本深入探讨如何使用VC++进行网络通信编程的专业书籍。这本书通过实例的方式,让读者能够理解并掌握网络通信编程的核心技术。光盘源代码包含了书中第三部分第六节的所有实例,为...
总的来说,这个"VC++串口通信经典源码合集"是一个宝贵的资源,涵盖了串口通信的各个方面,包括基础操作、数据处理、多线程编程和网络通信的结合。对于想要学习或提升VC++串口通信技能的开发者来说,这是一个不可多得...
总的来说,这个压缩包提供的源代码涵盖了VC++网络通信编程的核心概念,包括基础的TCP/IP通信、套接字编程、多线程处理和UDP通信。通过学习和实践这些案例,开发者可以提升在网络编程领域的技能,尤其在设计和实现高...
《VC++串口通信技术书籍》是一本专为VC++开发者设计的深度学习资源,它深入探讨了在VC++环境中实现串口通信的各种技术和实践。串口通信是计算机通信领域中的一个重要部分,尤其是在嵌入式系统、自动化设备以及工业...
4. **线程通信**: 线程间通信可以通过消息队列、共享内存、管道或事件对象等方式实现。在MFC中,可以使用PostThreadMessage函数将消息从一个线程发送到另一个线程的消息队列。 5. **线程生命周期管理**: 创建...
本论文以陕西省自然科学基金项目(2001年度)—软件逆向工程技术研究为背景,提出了一种软件再设计(redesign)方法,它以面向对象的分析和设计为指导,详述了Windows编程的一个应用领域:多线程通信技术。基于微软基础...
在本文中,我们将深入探讨由标题“VC++多线程/进程编程实例(2)(4个实例-附源代码)”所涵盖的VC++编程技术。这个资源提供了四个具体的实例,旨在帮助开发者理解如何在VC++环境中进行多线程和多进程编程,以及线程...