![]() |
1
2
我不确定C++,但这就是Java中的方法。您将拥有一个扩展线程(或实现可运行)的类,以及一个具有您想要传递的参数的构造函数。然后,在创建新线程时,必须传递参数,然后启动线程,如下所示:
你的情况一定是一样的。 |
![]() |
2
1
另一种方法是扩展这个线程类以接受一个函数作为唯一的构造函数参数,这样您就可以绑定其中的任何调用。 那么使用线程的类不需要从线程继承,而只需要有一个(或多个)线程成员。该函数调用所需的任何起始点(类的某些方法具有任何参数) |
![]() |
3
1
这是一个典型的模式: 1)定义一个数据结构,它封装了线程所需的所有数据。 2)在主线程中,使用operator new在堆上实例化数据结构的副本。 3)填充数据结构,将指针强制转换为void*,通过线程库提供的任何方法将void*传递给线程过程。 4)当工作线程得到void*时,它将其重新解释为数据结构,然后获得对象的所有权。也就是说,当线程处理完数据后,线程会将其释放,而不是主线程将其释放。 下面是您可以在Windows中编译和测试的示例代码。
|
![]() |
4
0
线程启动的一个常见问题是,传递的参数只存在于调用函数的堆栈上。线程启动通常被延迟,这样调用函数返回,而线程实际启动只需要一段时间——到那时参数就不存在了。 解决方法之一是创建一个事件,然后启动线程,将事件作为参数之一传递。然后,启动函数等待事件,该事件在线程完成启动后由线程发出信号。 |
![]() |
5
0
可以将参数作为线程类的成员传递。创建线程的线程可能会在线程启动之前调用其他方法和/或调用成员函数。因此,它可以填充工作所需的任何成员。然后,当调用run方法时,它将具有启动所需的信息。 我假设您将为每个线程使用单独的对象。 您通常会将创建的所有线程放入一个数组、向量等中。 |
![]() |
6
0
可以通过构造函数传递它们。只要确保指针的寿命比线程长。 |
![]() |
7
0
好吧,我更愿意将参数放在start()方法中,这样您就可以有一个受保护的构造函数,而不必通过派生类构造函数级联参数。 我很乐意让我的声明看起来像这样:
只需确保您的参数以某种方式收缩,例如,1将为int,2将为double等。:) |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 3 年前 |