zoukankan      html  css  js  c++  java
  • 非静态成员函数作为线程函数

    如题,下面是代码.

     1 // header.h
     2 class A
     3 {
     4 public:
     5     bool StartServer(int port);
     6 
     7 private:
     8     unsigned int __stdcall listenThreadFunction();
     9     
    10     int mData;
    11 }
    12 
    13 // implement.cpp
    14 #include "header.h"
    15 
    16 union
    17 {
    18     unsigned int (__stdcall *ThreadPorc)(void*);
    19     unsigned int (__stdcall A::*MemberProc)();
    20 }StdcallProc;
    21 
    22 bool A::StartServer(int port)
    23 {
    24     mData = 100;    // 测试
    25 
    26     StdcallProc.MemberProc = &A::listenThreadFunction;        // 关键点,将"非静态成员函数"放进去了
    27     // ...
    28     // 注意作为线程的非静态成员函数是没有参数的,因为非静态成员函数有一个默认的this参数
    29     // 即,函数参数列表为空的非静态成员函数已经有了一个参数,那就在创建线程的时候将this作为参数值传入即可.
    30     CloseHandle((HANDLE)_beginthreadex(NULL, 0, StdcallProc.ThreadPorc, (void*)this, 0, NULL));
    31     // ...    
    32 }
    33 
    34 unsigned int A::listenThreadFunction()
    35 {
    36     // 这是线程函数.
    37     // 在这里可以使用this指针啦.
    38     
    39     // 在这里可以正常输出mData的值:100.
    40     std::cout << mData << std::endl;
    41     
    42     return 0;
    43 }
  • 相关阅读:
    scrapy框架(一)
    selenium爬取京东商品信息
    自动化测试工具selenium的使用
    xpath选择器的使用
    爬取网页数据实例
    爬虫实操
    爬虫之`beautifulsoup4`模块
    DNS学习笔记
    MongoDB集群部署
    MongoDB单机部署
  • 原文地址:https://www.cnblogs.com/emyueguang/p/2960704.html
Copyright © 2011-2022 走看看