きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

C++17予定らしいawait

C#では便利なawaitがありますが、C++にも導入予定らしいです。これでマルチスレッド周りがより便利になりますね。VC++ 2013Nov CTPより、VisualStudioでもインテリセンスはキキませんがコンパイルができるので色々遊べます。ジェネリックラムダとかconstexprとか無制限unionとか普通に使いたいですね。

#include <cstdio>

#include <ppltasks.h>
#include <pplawait.h>

concurrency::task<void> func() __resumable {
	Sleep(100);
}

// __awaitを使う関数は__resumableがついていないとダメ
concurrency::task<void> execute_func() __resumable {
	printf("start of func\n");
	__await func(); // ここでfuncの終了を待ち合わせる
	printf("end of func\n");
}

int main() {
	printf("start of main\n");
	auto task = execute_func(); // 関数の実行が終わらなくても
	printf("wait in main\n"); // ここで実行される
	task.wait(); // execute_funcの終了を待つ
	printf("join at main\n");
	getchar();
	return 0;
}