小编Per*_*tto的帖子

如何创建其主要功能需要引用参数的线程?

我需要在线程中创建对变量的引用。当像下面的代码那样执行操作时,会出现两个错误:

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)

c++ windows multithreading reference

3
推荐指数
1
解决办法
56
查看次数

结构内部结构:“非法引用非静态成员”错误

我需要在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)

c++ constructor struct

1
推荐指数
1
解决办法
68
查看次数

C# 中的多个并行任务不会提高计算时间

我有一个复杂的数学问题要解决,我决定并行进行一些独立计算以缩短计算时间。在许多 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)

c# multithreading task winforms

1
推荐指数
1
解决办法
855
查看次数

标签 统计

c++ ×2

multithreading ×2

c# ×1

constructor ×1

reference ×1

struct ×1

task ×1

windows ×1

winforms ×1