windows下线程间的通信方式
1.事件:
(在信息交换函数中将控件的值与控件id进行绑定,这样我们就可以更新或者获取控件的值)
void CMy0722ThreadTalkingDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Radio(pDX, IDC_RADIO1, m_radio);
DDX_Control(pDX, IDC_COMBO1, m_test);
}
void CMy0722ThreadTalkingDlg::OnBnClickedButton1()
{
//创建线程
if(!m_hThread)
{
m_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);//在线程创建之前创建事件
//安全属性,(重置事件)人工为true,信号(false对应为无信号),事件名字(跨进程时可以使用));
m_hThread = (HANDLE)_beginthreadex(NULL,,&CMy0722ThreadTalkingDlg::ThreadProc,this,,NULL); } } unsigned _stdcall CMy0722ThreadTalkingDlg::ThreadProc( void * lpvoid)
{
CMy0722ThreadTalkingDlg *pthis = ( CMy0722ThreadTalkingDlg *)lpvoid;
CString str;
while(pthis->m_bFlagQuit)
{
//等事件
if(WAIT_TIMEOUT == WaitForSingleObject(pthis->m_hEvent,))
{
continue;
}
int nSum = ;
for(int i = ;i <= pthis->m_nCalc;i++)
{
nSum+= i;
} //第一种方式:事件 str.Format(_T("%d"),nSum);
36 pthis->GetDlgItem(IDC_EDIT1)->SetWindowText(str); }
return ;
} void CMy0722ThreadTalkingDlg::OnBnClickedButton2()
{
//计算
// m_radio = 1;
//UpdateData( FALSE); //初始化对话框数据
//获得要计算的值
UpdateData(TRUE); //从对话框上获得数据
switch (m_radio)//此处用了组控件,但m_radio与tab键编号多少无关,仅是一句tab键的顺序从0开始编号(如tab键我们设置为123...,但m_radio的值仍是从0开始)
{
case :
m_nCalc = ;
break;
case :
m_nCalc = ;
break;
case :
m_nCalc = ;
break;
default:
break;
} //将事件置为有信号
SetEvent(m_hEvent);//先拿到值再将事件置为有信号 } void CMy0722ThreadTalkingDlg::OnDestroy()
{
CDialogEx::OnDestroy(); // TODO: 在此处添加消息处理程序代码
m_bFlagQuit = false; if(m_hThread)
{
if(WAIT_TIMEOUT == WaitForSingleObject(m_hThread,))
{
TerminateThread(m_hThread,-);
}
CloseHandle(m_hThread);
m_hThread = NULL; } if(m_hEvent)
{
CloseHandle(m_hEvent);
m_hEvent = NULL;
}
}
2.消息
void CMy0722ThreadTalkingDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//创建线程
if(!m_hThread)
{
m_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);//在线程创建之前创建事件
//安全属性,(重置事件)人工为true,信号,名字);
m_hThread = (HANDLE)_beginthreadex(NULL,,&CMy0722ThreadTalkingDlg::ThreadProc,this,,NULL); } } unsigned _stdcall CMy0722ThreadTalkingDlg::ThreadProc( void * lpvoid)
{
CMy0722ThreadTalkingDlg *pthis = ( CMy0722ThreadTalkingDlg *)lpvoid;
CString str;
while(pthis->m_bFlagQuit)
{
//等事件
if(WAIT_TIMEOUT == WaitForSingleObject(pthis->m_hEvent,))
{
continue;
}
int nSum = ;
for(int i = ;i <= pthis->m_nCalc;i++)
{
nSum+= i;
} //第二种方式 消息--- 显示主窗口
pthis->PostMessage(UM_MSG,nSum,); }
return ;
} LRESULT CMy0722ThreadTalkingDlg::OnMsg(WPARAM wparam,LPARAM lparam)
{
CString str;
str.Format(_T("%d"),wparam); GetDlgItem(IDC_EDIT1)->SetWindowText(str);
//while(1);
return ;
} void CMy0722ThreadTalkingDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//计算
// m_radio = 1;
//UpdateData( FALSE); //初始化对话框数据
//获得要计算的值
UpdateData(TRUE); //从对话框上获得数据
switch (m_radio)
{
case :
m_nCalc = ;
break;
case :
m_nCalc = ;
break;
case :
m_nCalc = ;
break;
default:
break;
} //将事件置为有信号
SetEvent(m_hEvent);//先拿到值再将事件置为有信号 } void CMy0722ThreadTalkingDlg::OnDestroy()
{
CDialogEx::OnDestroy(); // TODO: 在此处添加消息处理程序代码
m_bFlagQuit = false; if(m_hThread)
{
if(WAIT_TIMEOUT == WaitForSingleObject(m_hThread,))
{
TerminateThread(m_hThread,-);
}
CloseHandle(m_hThread);
m_hThread = NULL; } if(m_hEvent)
{
CloseHandle(m_hEvent);
m_hEvent = NULL;
}
}
https://www.cnblogs.com/itech/archive/2010/06/29/1767311.html
windows下线程间的通信方式的更多相关文章
- JAVA多线程之线程间的通信方式
(转发) 收藏 记 周日,北京的天阳光明媚,9月,北京的秋格外肃穆透彻,望望窗外的湛蓝的天,心似透过栏杆,沐浴在这透亮清澈的蓝天里,那朵朵白云如同一朵棉絮,心意畅想....思绪外扬, 鱼和熊掌不可兼得 ...
- 【Linux】Linux下进程间的通信方式
本文内容: 1.进程通信的目的 2.介绍Linux下进程间的4种通信方式:管道,消息队列,共享内存,信号量 ps:套接字也可以用于进程间的通信,不过是不同物理机器上的进程通信,本章讨论是是同一台物理机 ...
- Java开发笔记(一百零三)线程间的通信方式
前面介绍了多线程并发之时的资源抢占情况,以及利用同步.加锁.信号量等机制解决资源冲突问题,不过这些机制只适合同一资源的共享分配,并未涉及到某件事由的前因后果.日常生活中,经常存在两个前后关联的事务,像 ...
- 一个Windows下线程池的实现(C++)
前言 本文配套代码:https://github.com/TTGuoying/ThreadPool 先看看几个概念: 线程:进程中负责执行的执行单元.一个进程中至少有一个线程. 多线程:一个进程中有多 ...
- 线程间的通信方式3--Handler
Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因 ...
- windows下线程库的使用
下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可) http://sourceware.org/pthreads-win32 ...
- java线程间的通信方式
1.同步 synchronized 2.轮询 while volatile 3.wait/notify机制 syncrhoized加锁的线程的Object类的wait()/notify()/not ...
- 线程间的通信方式2--管道流Pipes
“管道”是java.io包的一部分.它是Java的特性,而不是Android特有的.一条“管道”为两个线程建立一个单向的通道.生产者负责写数据,消费者负责读取数据. 下面是一个使用管道流进行通信的例子 ...
- windows下进程间通信与线程间通信
进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...
随机推荐
- 谈话准备.xmind 思维导图模版
谈话准备.xmind 思维导图模版,谈话准备.xmind.zip 谈话准备 目标 1…… 2…… 3…… 影响决定因素 进程 经费 策略 问题 客户 竞争对手 竞争对手 潜在 现存 问题 个性 团队 ...
- 网络营销相关缩写名称CPM CPT CPC CPA CPS SEM SEO解析
网络营销相关缩写名称CPM CPT CPC CPA CPS SEM SEO解析 CPM CPT CPC CPA CPS SEM SEO在网络营销中是什么意思?SEO和SEM的区别是? CPM(Cost ...
- ELK+Kafka学习笔记之搭建ELK+Kafka日志收集系统集群
0x00 概述 关于如何搭建ELK部分,请参考这篇文章,https://www.cnblogs.com/JetpropelledSnake/p/9893566.html. 该篇用户为非root,使用用 ...
- Python Web学习笔记之WebSocket原理说明
众所周知,Web应用的通信过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现.这种机制对于信息变化不是特别频繁的应用可以良好支撑,但对于实时要 ...
- Servlet过滤器和监听器配置范例
1,Servlet过滤器 <filter> <filter-name>charset</filter-name> <filter-class>org.g ...
- Python3: Windows系统上同时安装Python2和Python3
Python3: Windows系统上同时安装Python2和Python3 为什么要同时安装Python2和Python3环境呢? 因为一些库只支持Python2或者Python3; 在同一台电脑上 ...
- NFS常用命令
1.客户端查看服务端可挂载卷 showmount -t 服务端IP 2.不重启加载NFS配置文件 exportfs -avr
- JavaScript 中语法规范及调试
JavaScript 中语法规范及调试 版权声明:未经博主授权,内容严禁分享转载 JavaScript 开发环境 JavaScript 脚本可以使用任意一款纯文本编辑器进行编程开发. 常见的前端开发编 ...
- 20145322 Exp5 Adobe阅读器漏洞攻击
20145322 Exp5 Adobe阅读器漏洞攻击 实验过程 IP:kali:192.168.1.102 windowsxp :192.168.1.119 msfconsole进入控制台 使用命令为 ...
- UVa 10635 Prince and Princess - 动态规划
讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对 ...