c++ - Concurrency::create_task 在 VisualStudio clr 项目中抛出运行时异常

标签 c++ visual-studio visual-c++ mfc

我是 VisualStudio 和 Visual C++ 的新手。我正在尝试在 MFC 项目中使用 Concurrency::create_task 函数。

我创建了 clr 项目,创建了简单的表单并创建了新类来管理任务。 而且我必须将公共(public)语言运行时支持设置为无公共(public)语言运行时支持才能使用此类中的任务。

类头testtest.h:

#pragma once
class testtest
{
public:
    testtest();
};

testtest.cpp:

#include "testtest.h"
#include <ppltasks.h>

using namespace Concurrency;

testtest::testtest()
{
    auto task1 = create_task([]() -> int
    {
        return 42;
    });
}

当我启动我的应用程序时,它抛出运行时异常(我什至没有创建测试类实例)

Program: C:\projects\c\Project1\Debug\Project1.exe
File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
Line: 1037

Expression: _CrtIsValidHeapPointer(block)

如果我创建 win32 控制台项目,一切正常。 花了很多时间来解决这个问题,但现在我不知道我做错了什么。

有什么建议吗?

最佳答案

函数

testtest::testtest()
{
    auto task1 = create_task([]() -> int
    {
        return 42;
    });
}

包含一个竞争:创建任务对象,运行任务,同时函数退出并调用析构函数。

要删除比赛,请使用 wait or get :

testtest::testtest()
{
    auto task1 = create_task([]() -> int
    {
        return 42;
    });

    // Uncomment one of the following
    // task1.get();
    // task1.wait();
}

一场比赛,嗯,一场比赛 - 改变构建条件(或基本上任何其他),可以改变它的运行方式。应消除竞争条件。

关于c++ - Concurrency::create_task 在 VisualStudio clr 项目中抛出运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242625/

相关文章:

visual-studio - Visual Studio 宏列出项目而不是解决方案文件夹

visual-studio - 警告主要版本 52 比该编译器支持的最高主要版本 51 更新

c++ - "standard output stream"和 "standard output device"有什么区别?

c++ - 0x751fc52f异常,代码: 0x71a: , flags=0x1(无法继续执行)(第一次机会)

c++ - 如何在 openCV 中读取 .tif 浮点灰度图像

c++ - OpenGL GL_POLYGON 打印不正确

c++ - 在 Visual C++ 编译器中使用 std::initializer_list 2012 年 11 月 CTP

c++ - 无偏随机数发生器

visual-studio - 防止 Visual Studio 2010 中的注释格式

c++ - 渲染目标 ID2D1Bitmap 错误