MQL中的异步和多线程编程 - 页 35

 
Andrei Novichkov:

为什么不在文档中实际阅读关于该标志的内容?在https://en.cppreference.com 。以及在stackoverflow.com上有讨论的例子。我通常使用这些信息来源,我建议你也这样做。

那么,如果你不对自己的话语负责,你为什么要加入谈话?我感兴趣的是你的意见,而不是手册上的聪明人。别挡着我的路。没有你的指示,我也能读懂码头。我不需要所有这些future/promise/async的zoo来在一个线程中调用函数

 
Vict:

如果你不回答你所说的话,那么你为什么要来参加谈话?我感兴趣的是你的意见,而不是手册上的聪明人。 别挡着我的路。没有你的指示,我也能读懂码头。而且我不需要所有这些future/promise/async的zoo来在一个线程中调用一个函数

你没有任何意义。你不知道,我告诉你在哪里可以找到信息。而这是我的错。更经常地成为书籍的朋友。
 
Andrei Novichkov:
你没有任何意义。你不知道,我告诉你在哪里可以找到信息。而这是我的错。更经常地成为书籍的朋友。

显然,你也不知道。为什么什么都不写?也许我不知道,这有什么大不了的?我要求提供正常的意见,他把我打发到某个地方去了。

列入黑名单,同志。

 
Vict:

显然,你也不知道。为什么什么都不写?也许我不知道,这有什么大不了的?我要求提供正常的意见,他把我打发到某个地方。

列入黑名单,同志。

我没有把你送到任何地方,我甚至没有考虑过这个问题。我不善于用自己的语言回答这样的问题,所以我写了关于文件的内容。再说一遍,有什么可冒犯的呢?但正如你所希望的那样,黑色,所以黑色。
 
Andrei Novichkov:
我没有把你送到任何地方,我做梦也不会想到。我不善于用自己的语言来回答这样的问题,所以我写了关于文档的内容。再说一遍,有什么可冒犯的呢? 但正如你所希望的那样,黑色,所以黑色。

这方面的文件没有什么用处

std::launch::deferred 任务在第一次请求其结果时在调用线程上执行(懒惰评估)。
我真的不明白为什么我需要这样一个奇迹,我可以很容易地把一个函数的指针传到我需要的线程中,并在那里计算它,而不需要任何async( std::launch::deferred)。
 
Vict:

我真的不明白为什么我需要这样一个奇迹,我可以很容易地把一个函数的指针传到我需要的线程中,并在那里计算它,而不需要任何async( std::launch::deferred)。

可能偏离主题,但。

注意到微软的例子往往是写成自带文档的代码,所以他们写的是繁琐的结构,可以展开后替换成最终的值(比如,你看到代码,就能一目了然))。)

HH:在C#的例子中,不幸的是,它不是这样的,有几次我写C#的时候,相信它实际上是C++的类似物,有一些使用OOP 的倾向,结果发现它不是这样的,它根本不是C++,通常你不能 "获得 "类的字段,而不投向基类,这就是为什么我不得不使用长的不方便的结构,一般来说,解析C#的现成库是一种真正的冒险

 

注意,默认情况下,这两个标志是一起应用的 延迟 | 异步,这就免除了开发者的责任。我们在这里谈论的是主线程函数,是的,你可以传递给它任何东西,包括一个指向函数的指针,或者一个函数载体,作为参数。而延迟标志甚至可以暗示函数的同步执行。看,我告诉过你,我不善于用自己的话来回答这种问题)。你会被弄得一团糟。通常情况下,你把所有东西都留在默认状态,而不去管这些标志,也许这是不正确的。

 
Igor Makanu:

HH:不幸的是,C#的例子并不是这样的,有几次我用C#写的时候,确信它实际上是C++的类似物,有一些必须使用OOP 的倾向,结果发现它并不是这样的,它根本不是C++,往往你不能 "得到 "类的字段而不投到基类,所以你必须使用冗长繁琐的结构,总之,解析C#的现成库是一种真正的冒险

好吧,MS有非常好的关于Spurs的文档。一切都有详细的解释。不能抱怨。
 
Vict:

嗯,这方面的文件没有什么用处

我真的不明白为什么我需要这样一个奇迹,我可以很容易地把一个函数的指针传到我需要的线程中,并在那里计算它,而不需要任何async( std::launch::deferred)。
好吧,比如说,你需要一个函数用堆栈中的当前参数来计算数值,但不是现在,也不是在这个范围。所以,你创建了std::asinc,但是,问题来了,其中一个参数是一个全局变量 的引用或指针,但是在计算中你不需要这个变量的当前值,而是需要以后的值,这就是为什么要创建std::lounch::asinc和std::lounch::deferred bitmask,你可以现在把值传给函数,以后进行计算
 
Vladimir Simakov:
好吧,例如,你需要函数用堆栈中的当前参数来计算数值,但不是现在,也不是在这个范围内。所以,你创建了std::asinc,但问题来了,其中一个参数是一个全局变量 的引用或指针,但计算不需要这个变量的当前值,而是需要以后的值,这就是为什么创建了std::lounch::asinc和std::lounch::deferred bitmasks,你可以现在把值传给函数,以后进行计算

因此,我可以把一个我传递给async的函数,绑定参数给它,并存储它,直到调用它的时候(或把它发送到另一个线程)。存储future还是std::bind()的输出有什么区别呢?

我想到的唯一合理的解释是--手动控制池中运行线程的数量(如果我们不相信默认的async|deferred)--例如,如果系统太忙,停止发送带有async标志的作业,发送deferred。

总的来说,我对async()的迟钝有点失望,我将创建自己的轻量级线程池,在我看来,它将会快得多。