zoukankan      html  css  js  c++  java
  • 多线程专题之线程间的通信

    接上一回 - 多线程专题之MFC线程(2),我们来聊聊线程间的通信:

    /*------------------------------------------------------------*\
          多线程间的通信
    应用程序中多线程的使用通常都是用于主线程执行与用户交互,
    次要线程执行后台任务。当用户触发了某个事件,可能需要让次要线程
    知道,然后处理该事件。这就涉及了如何在多个线程间的通信问题。

    通常有三种方式:
     1、全局变量:
     同一个进程中的所有线程共享操作系统分配所有资源,这就意味着
     我们可以用全局变量解决通信问题。当然了,建议使用volati
     le 修饰符表示全局变量,作用上次不说了嘛,好,在说一次啊。
     volatile 是告诉编译器不要对该变量作任何优化的,
     即不把它放到寄存器中。如果线程要传递多个信息,建议而且必须
     定义一个结构,通过传递指向该结构的指针进行传递信息。
     2、传递参数:
     创建现成的时候不是有一个线程参数嘛。我们可以用它来传啊。不过
     它只可以在创建线程的时候用。
     3、发送自定义消息:
     我们可以在一个线程中向另一个线程发送自定义的消息。这是通过
     操作系统实现的。这是利用Windows操作系统的消息驱动机制,接收
     消息的线程必须建立了消息循环,然后,不断的从消息队列里取出消
     息进行相应的消息处理
    \*------------------------------------------------------------*/
    void CMultiThreadDlg::OnBtnUsageSix()
    {
     // TODO: Add your control notification handler code here
    //这里,我们只写一个发送消息的例子
     CWinThread * pThread = NULL;
     
     pThread = AfxBeginThread (
      RUNTIME_CLASS(CAfxThread),      //线程类
      THREAD_PRIORITY_NORMAL,       //线程优先级
      0,            //Windows系统一般线程栈大小为1 MB,创建线程的数目与物理内存和栈空间大小有关
      0,            //线程创建标志,如:CREATE_SUSPENDED
      NULL );           //系统安全描述,NULL
     
     if ( pThread )
     {
      pThread->PostThreadMessage( WM_AFX_HELLO_MSG, 0, (LPARAM)0 );
     }
    }

    记得自己试试啊.呵呵.下次就到线程间的同步了哦!

  • 相关阅读:
    窗体的扩展样式GWL_EXSTYLE用于SetWindowLong
    内存映射对于大文件的使用
    Delphi实现全局鼠标钩子
    全局键盘钩子(WH_KEYBOARD)
    实现拦截API的钩子(Hook)
    JBoss + EJB3 + MySql : 开发第一个EJB
    取PE文件的引入表和导出表
    Webbrowser中模拟连接点击(非鼠标模拟)
    打造无DLL版穿透防火墙Downloader
    Delphi 常用属性+方法+事件+代码+函数
  • 原文地址:https://www.cnblogs.com/tianlangshu/p/1989562.html
Copyright © 2011-2022 走看看