1.事件:

(在信息交换函数中将控件的值与控件id进行绑定,这样我们就可以更新或者获取控件的值)

  1. void CMy0722ThreadTalkingDlg::DoDataExchange(CDataExchange* pDX)
  2. {
  3. CDialogEx::DoDataExchange(pDX);
  4. DDX_Radio(pDX, IDC_RADIO1, m_radio);
  5. DDX_Control(pDX, IDC_COMBO1, m_test);
  6. }
  1. void CMy0722ThreadTalkingDlg::OnBnClickedButton1()
  2. {
  3. //创建线程
  4. if(!m_hThread)
  5. {
  6. m_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);//在线程创建之前创建事件
  7. //安全属性,(重置事件)人工为true,信号(false对应为无信号),事件名字(跨进程时可以使用));
  8. m_hThread = (HANDLE)_beginthreadex(NULL,,&CMy0722ThreadTalkingDlg::ThreadProc,this,,NULL);
  9.  
  10. }
  11.  
  12. }
  13.  
  14. unsigned _stdcall CMy0722ThreadTalkingDlg::ThreadProc( void * lpvoid)
  15. {
  16. CMy0722ThreadTalkingDlg *pthis = ( CMy0722ThreadTalkingDlg *)lpvoid;
  17. CString str;
  18. while(pthis->m_bFlagQuit)
  19. {
  20. //等事件
  21. if(WAIT_TIMEOUT == WaitForSingleObject(pthis->m_hEvent,))
  22. {
  23. continue;
  24. }
  25. int nSum = ;
  26. for(int i = ;i <= pthis->m_nCalc;i++)
  27. {
  28. nSum+= i;
  29. }
  30.  
  31. //第一种方式:事件 str.Format(_T("%d"),nSum);
  32. 36 pthis->GetDlgItem(IDC_EDIT1)->SetWindowText(str);
  33.  
  34. }
  35. return ;
  36. }
  37.  
  38. void CMy0722ThreadTalkingDlg::OnBnClickedButton2()
  39. {
  40. //计算
  41. // m_radio = 1;
  42. //UpdateData( FALSE); //初始化对话框数据
  43. //获得要计算的值
  44. UpdateData(TRUE); //从对话框上获得数据
  45. switch (m_radio)//此处用了组控件,但m_radio与tab键编号多少无关,仅是一句tab键的顺序从0开始编号(如tab键我们设置为123...,但m_radio的值仍是从0开始)
  46. {
  47. case :
  48. m_nCalc = ;
  49. break;
  50. case :
  51. m_nCalc = ;
  52. break;
  53. case :
  54. m_nCalc = ;
  55. break;
  56. default:
  57. break;
  58. }
  59.  
  60. //将事件置为有信号
  61. SetEvent(m_hEvent);//先拿到值再将事件置为有信号
  62.  
  63. }
  64.  
  65. void CMy0722ThreadTalkingDlg::OnDestroy()
  66. {
  67. CDialogEx::OnDestroy();
  68.  
  69. // TODO: 在此处添加消息处理程序代码
  70. m_bFlagQuit = false;
  71.  
  72. if(m_hThread)
  73. {
  74. if(WAIT_TIMEOUT == WaitForSingleObject(m_hThread,))
  75. {
  76. TerminateThread(m_hThread,-);
  77. }
  78. CloseHandle(m_hThread);
  79. m_hThread = NULL;
  80.  
  81. }
  82.  
  83. if(m_hEvent)
  84. {
  85. CloseHandle(m_hEvent);
  86. m_hEvent = NULL;
  87. }
  88. }

2.消息

  1. void CMy0722ThreadTalkingDlg::OnBnClickedButton1()
  2. {
  3. // TODO: 在此添加控件通知处理程序代码
  4. //创建线程
  5. if(!m_hThread)
  6. {
  7. m_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);//在线程创建之前创建事件
  8. //安全属性,(重置事件)人工为true,信号,名字);
  9. m_hThread = (HANDLE)_beginthreadex(NULL,,&CMy0722ThreadTalkingDlg::ThreadProc,this,,NULL);
  10.  
  11. }
  12.  
  13. }
  14.  
  15. unsigned _stdcall CMy0722ThreadTalkingDlg::ThreadProc( void * lpvoid)
  16. {
  17. CMy0722ThreadTalkingDlg *pthis = ( CMy0722ThreadTalkingDlg *)lpvoid;
  18. CString str;
  19. while(pthis->m_bFlagQuit)
  20. {
  21. //等事件
  22. if(WAIT_TIMEOUT == WaitForSingleObject(pthis->m_hEvent,))
  23. {
  24. continue;
  25. }
  26. int nSum = ;
  27. for(int i = ;i <= pthis->m_nCalc;i++)
  28. {
  29. nSum+= i;
  30. }
  31.  
  32. //第二种方式 消息--- 显示主窗口
  33. pthis->PostMessage(UM_MSG,nSum,);
  34.  
  35. }
  36. return ;
  37. }
  38.  
  39. LRESULT CMy0722ThreadTalkingDlg::OnMsg(WPARAM wparam,LPARAM lparam)
  40. {
  41. CString str;
  42. str.Format(_T("%d"),wparam);
  43.  
  44. GetDlgItem(IDC_EDIT1)->SetWindowText(str);
  45. //while(1);
  46. return ;
  47. }
  48.  
  49. void CMy0722ThreadTalkingDlg::OnBnClickedButton2()
  50. {
  51. // TODO: 在此添加控件通知处理程序代码
  52. //计算
  53. // m_radio = 1;
  54. //UpdateData( FALSE); //初始化对话框数据
  55. //获得要计算的值
  56. UpdateData(TRUE); //从对话框上获得数据
  57. switch (m_radio)
  58. {
  59. case :
  60. m_nCalc = ;
  61. break;
  62. case :
  63. m_nCalc = ;
  64. break;
  65. case :
  66. m_nCalc = ;
  67. break;
  68. default:
  69. break;
  70. }
  71.  
  72. //将事件置为有信号
  73. SetEvent(m_hEvent);//先拿到值再将事件置为有信号
  74.  
  75. }
  76.  
  77. void CMy0722ThreadTalkingDlg::OnDestroy()
  78. {
  79. CDialogEx::OnDestroy();
  80.  
  81. // TODO: 在此处添加消息处理程序代码
  82. m_bFlagQuit = false;
  83.  
  84. if(m_hThread)
  85. {
  86. if(WAIT_TIMEOUT == WaitForSingleObject(m_hThread,))
  87. {
  88. TerminateThread(m_hThread,-);
  89. }
  90. CloseHandle(m_hThread);
  91. m_hThread = NULL;
  92.  
  93. }
  94.  
  95. if(m_hEvent)
  96. {
  97. CloseHandle(m_hEvent);
  98. m_hEvent = NULL;
  99. }
  100. }

https://www.cnblogs.com/itech/archive/2010/06/29/1767311.html

windows下线程间的通信方式的更多相关文章

  1. JAVA多线程之线程间的通信方式

    (转发) 收藏 记 周日,北京的天阳光明媚,9月,北京的秋格外肃穆透彻,望望窗外的湛蓝的天,心似透过栏杆,沐浴在这透亮清澈的蓝天里,那朵朵白云如同一朵棉絮,心意畅想....思绪外扬, 鱼和熊掌不可兼得 ...

  2. 【Linux】Linux下进程间的通信方式

    本文内容: 1.进程通信的目的 2.介绍Linux下进程间的4种通信方式:管道,消息队列,共享内存,信号量 ps:套接字也可以用于进程间的通信,不过是不同物理机器上的进程通信,本章讨论是是同一台物理机 ...

  3. Java开发笔记(一百零三)线程间的通信方式

    前面介绍了多线程并发之时的资源抢占情况,以及利用同步.加锁.信号量等机制解决资源冲突问题,不过这些机制只适合同一资源的共享分配,并未涉及到某件事由的前因后果.日常生活中,经常存在两个前后关联的事务,像 ...

  4. 一个Windows下线程池的实现(C++)

    前言 本文配套代码:https://github.com/TTGuoying/ThreadPool 先看看几个概念: 线程:进程中负责执行的执行单元.一个进程中至少有一个线程. 多线程:一个进程中有多 ...

  5. 线程间的通信方式3--Handler

    Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因 ...

  6. windows下线程库的使用

    下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可)   http://sourceware.org/pthreads-win32 ...

  7. java线程间的通信方式

    1.同步 synchronized 2.轮询 while   volatile 3.wait/notify机制 syncrhoized加锁的线程的Object类的wait()/notify()/not ...

  8. 线程间的通信方式2--管道流Pipes

    “管道”是java.io包的一部分.它是Java的特性,而不是Android特有的.一条“管道”为两个线程建立一个单向的通道.生产者负责写数据,消费者负责读取数据. 下面是一个使用管道流进行通信的例子 ...

  9. windows下进程间通信与线程间通信

    进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...

随机推荐

  1. spring中对象转json过滤(jackson)

    spring自带的json解析器是jackson jackson注解 @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性. @JsonFormat 此注解用于属性上,作用是把 ...

  2. Python Web学习笔记之SOCK_STREAM和SOCK_DGRAM

    SOCK_STREAM 数据流 一般是tcp/ip协议的编程 有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送 SOCK_DGRAM 数据包 udp协议网络编程 ...

  3. 1、初始Java应用程序

    Java Application程序,也称为Java应用程序,是可独立的应用程序.该类程序以main()方法作为入口,由独立的Java解释器加载执行. 下面的列子是一个简单的Java应用程序. imp ...

  4. 20145336张子扬《网络对抗》MSF基础应用

    20145336张子扬 <网络对抗>MSF基础应用 实验一:主动攻击,利用ms08_067漏洞进行攻击 首先使用use exploit/windows/smb/ ms08_067 _net ...

  5. noip2010 真题练习 2017.2.18

    第一题比较简单,用exist数组判断是否在循环队列中,就可实现线性算法. Code #include<iostream> #include<cstdio> #include&l ...

  6. vijos 运输计划 - 二分答案 - 差分 - Tarjan

    Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...

  7. Inversion of Control Containers and the Dependency Injection pattern

    https://martinfowler.com/articles/injection.html One of the entertaining things about the enterprise ...

  8. 如何设置datatable的宽度

    本文为博主原创,未经允许不得转载: datatable插件具有很好的自动适应性,在大多数情况下可以自适应,完美的展示列表内容. 实现其自适应的其特性为:"bAutoWidth": ...

  9. codeforces804D Expected diameter of a tree

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  10. jenkins 工作空间的目录

    /usr/share/tomcat7/.jenkins/workspace/