我是 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/