我需要在线程中创建对变量的引用。当像下面的代码那样执行操作时,会出现两个错误:
C2672:'std :: invoke':找不到匹配的重载函数
C2893:无法专门化功能模板“
unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)”
如何正确编码?
#include <thread>
void foo(double a, double& b)
{
b = a;
}
int main()
{
double a = 0.0, b = 0.0;
std::thread f(foo, a, b);
f.join();
}
Run Code Online (Sandbox Code Playgroud) 我需要在struct内部创建一个struct。如何正确编码构造函数?我需要分别为A和B创建两个构造函数,还是可以像下面的示例一样仅为A使用一个“外部”构造函数?我的尝试导致C2597错误。
struct A
{
struct B
{
unsigned n;
int* d;
};
A(unsigned c)
{
B::n = c; // C2597
B::d = new int[c]; // C2597
}
};
Run Code Online (Sandbox Code Playgroud) 我有一个复杂的数学问题要解决,我决定并行进行一些独立计算以缩短计算时间。在许多 CAE 程序中,如 ANSYS 或 SolidWorks,可以为此目的设置多个核心。
我创建了一个简单的 Windows 窗体示例来说明我的问题。这里的函数是在权力时代从课堂上CalculateStuff()提出A来的。对于 2 个任务是时间,对于 4 个任务是时间。Sample1.2 maxmax / 2max / 4
我使用相同的代码计算了仅一个CalculateStuff()函数或四个重复项(CalculateStuff1(), ...2(), ...3(), ...4()每个任务一个)的结果操作时间。我不确定,是否对每个任务使用相同的功能很重要(无论如何,Math.Pow是一样的)。我还尝试启用或禁用 ProgressBar。
该表表示所有 12 种情况的操作时间(秒)。我预计 2 和 4 个任务的速度会快 2 倍和 4 倍,但在某些情况下,4 个任务甚至比 1 个任务还要糟糕。我的计算机有 2 个处理器,每个有 10 个内核。根据调试窗口,CPU 使用率随着任务的增加而增加。我的代码有什么问题,或者我误解了什么?为什么多个任务不能提高操作时间?
private readonly ulong max = 400000000ul;
// Sample class
private class Sample
{
public double A { get; set; } = 1.0;
}
// …Run Code Online (Sandbox Code Playgroud)