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

时间:2015-12-12 17:10:47

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

我是VisualStudio和visual c ++的新手。我试图在MFC项目中使用Concurrency :: create_task函数。

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

班级标题 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;
    });
}

当我启动我的应用程序时,它会抛出运行时异常(我甚至不创建testtest类实例)

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

Expression: _CrtIsValidHeapPointer(block)

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

功能

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();
}

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