整理自CSDN的论坛中,地址:https://bbs.csdn.net/topics/390703249

0.能够用this指针传递参数的原因是,线程之间的内存地址用的是同一套,即线程A中指针1指向的位置在线程B中仍然成立。

1.不同的线程不是两个独立的程序:线程不是进程(process是你说的程序)

2.线程函数必须是全局函数或者是静态成员函数:https://www.cnblogs.com/Stephen-Qin/p/11575356.html

静态成员函数则属于类, 不属于对象.  而this指针是指向对象自己的指针,即有了对象才有this指针.  所以你不能在线程函数中直接使用this指针, 因为线程函数中根本就没有这个东西,所以需要传进去,然后进行类型转换.
如果你研究得深入一点, 那么你就会知道, this指针, 并不是"成员变量", 而是从函数中传进去的. 即所有的非静态成员函数都会被加上一个this指针参数, 这是编译器自己加的.

举例说明:

class CIo
{
public:
CIo();
~CIo();
void ioStart();
void Start();  //Q1:这是可以不用,直接在下面的函数里实现吗?
static DWORD WINAPI start(void *arg);
private:
};
void CIo::Start()
{
这个线程里面已经可以开始使用类的成员变量了
} DWORD WINAPI CIo::start(void *arg)//返回值一定要这样写 WINAPI表示__stdcall,指被调用方去清理栈.
{
CIo *io = (CIo *)arg;
io->Start();      //Q2:这里不能够直接调用Start()吗?
return ;
} void CIo::ioStart()  //如何把这个程序运行起来?
{
HANDLE Handle;
Handle = CreateThread(NULL, , start, this, , NULL); //这里的start函数需要为静态类型的
CloseHandle(Handle);
}
 
————————————————
版权声明:本文为CSDN博主「GT19930910」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/FlayHigherGT/article/details/83651281

多线程用this指针来传递参数(整理)的更多相关文章

  1. 关于Delphi中多线程传递参数的简单问题

    http://bbs.csdn.net/topics/390513469/ unit uThread; interface uses Classes; type Th = class(TThread) ...

  2. [转] C++的引用传递、指针传递参数在java中的相应处理方法

    原文出处:[http://blog.csdn.net/conowen/article/details/7420533] 首先要明白一点,java是没有指针这个概念的. 但是要实现C++的引用传递.指针 ...

  3. go语言基础之指针做函数参数用地址传递

    1.指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(p1, p2 *int) { *p1, *p2 = *p ...

  4. JSP页面传递参数乱码问题整理

    1.JSP页面之间传递中文参数乱码 (1).a.jsp中正常传递参数,b.jsp 中 <% String projectName = new String(request.getParamete ...

  5. javascript传递参数如果是object的话,是按值传递还是按引用传递?

    作者:苏墨橘链接:https://www.zhihu.com/question/27114726/answer/35481766来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  6. mfc 在VC的两个对话框类中传递参数的三种方法

    弄了好久,今天终于把在VC中的对话框类之间传递参数的问题解决了,很开心,记录如下: 1. 我所建立的工程是一个基于MFC对话框的应用程序,一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMD ...

  7. C++向main函数传递参数的方法(实例已上传至github)

    通常情况下,我们定义的main函数都只有空形参列表: int main(){...} 然而,有时我们确实需要给mian传递实参,一种常见的情况是用户设置一组选项来确定函数所要执行的操作.例如,假定ma ...

  8. C++ 二维数组(双重指针作为函数参数)

    本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong ...

  9. c#基础语言编程-按值类型和引用类型传递参数

    引言 在介绍传递参数介绍前,请明白参数类型和传递方式是不同的.传递方式分为按值类型和引用类型传递参数.参数类型有值类型和引用类型,这个和C++是不同的.这里的传递方式对应c++中的深复制和浅复制. 两 ...

随机推荐

  1. Ubuntu中实现Docker内安装jenkins+jenkins远程触发

    前面做了在ubuntu中安装jenkins+docker实现自动部署,但是得安装jdk8+tomcat8环境,比较麻烦,因此本文记录如何将jenkins直接装在dockers内并且实现远程触发功能. ...

  2. 转载:对比Angular/jQueryUI/Extjs:没有一个框架是万能的

    Angular不能做什么?对比Angular/jQueryUI/Extjs 框架就好比兵器,你得明白你手里拿的是屠龙刀还是倚天剑,刀法主要是砍,剑法主要是刺.对于那些职业喷子和脑残粉,小僧送你们两个字 ...

  3. .net 开源项目地址

    https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet 这个下面是asp.net core 框架 ...

  4. Python 获取当前文件所在路径

    记录几个os获取路径的函数 1. os.path.realpath(__file__):获取文件的绝对路径,包括文件自己的名字 2.os.path.dirname(path):获取path路径的上级路 ...

  5. postgresql中rank() over, dense_rank(), row_number() 的用法和区别

  6. 【JavaWeb项目】一个众筹网站的开发(二)架构搭建之架构测试

    1.dao层和pojo都是使用mbg生成,基本的CRUD以及JavaBean 2.将mbg放在dao层,一旦dao层打包以后mbg就删除掉 一.创建数据库用于测试 数据库名称:scw_0325 SQL ...

  7. springboot 依赖

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  8. axios拦截设置和错误处理

    目前想出的处理接口请求进行全局错误提示 的最佳方案,axios整体配置如下 1.基于axiso.interceptors进行响应拦截: 主要负责全局提示错误 axios.interceptors.re ...

  9. 区间第k大的几种解法

    区间第K大问题,变化包括带修改和不带修改,强制在线和允许离线 修改主要是单点修改,我们前面也只讨论这种情况. 接下来我们从编程复杂度和时空复杂度来讨论几种做法. 1.整体二分(编程复杂度:低-中,时间 ...

  10. webpack配置教程

    1.npm脚本运行webpack与命令行输入webpack的区别  : https://segmentfault.com/a/1190000011052193   npm 模块的 安装 和 卸载  : ...