6

Windows上のVisualStudio2012Expressでクロスプラットフォームソフトウェアを作成しています。明らかな理由で、.NETを使用できませんSystem::Threading::Thread。.NETフォームに基づく抽象フレームワークを作成したので、VS2012を使用しながら、 C11の新しいスレッド機能(threads.hではなく)を使用できることを望んでいました。pthread.h私はそれがWindowsにとって不可能であると信じ始めています。誰かがアイデアを持っていますか。C ++ライブラリ(boostとstd)が私の唯一のオプションである場合にのみ、それらを使用します。

何をすべきか知っている人はいますか?

4

3 に答える 3

11

Visual Studio 2012はC11のスレッド化をサポートしていません(Microsoftは、Cを最新の状態に保つことにほとんど関心がなく、C ++に焦点を当てることを好みます)が、C++11のstd::threadおよび関連機能をサポートします。C ++を作成している場合は、Cのスレッドライブラリの代わりに、間違いなくそれらを使用する必要があります。

于 2013-02-28T17:46:38.317 に答える
6

Visual Studio 2017には、xthreads.hと非常によく似ていますが、わずかに異なるヘッダーが含まれていthreads.hます。例えば:

https://en.cppreference.com/w/c/thread/thrd_sleepから

#include <threads.h>
#include <time.h>
#include <stdio.h>

int main(void)
{
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
}

だろう

#include <thr/xthreads.h>
#include <time.h>
#include <stdio.h>

int main(void)
{
    struct xtime stoptime;
    xtime_get( &stoptime, 1);
    stoptime.sec += 1;
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
    _Thrd_sleep( &stoptime ); 
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
}

*注:xthreads.h標準ではないため、変更される可能性があります。*

https://gist.github.com/yohhoy/2223710にもエミュレーションライブラリがあります。

于 2019-02-20T17:12:03.527 に答える
0

C11スレッドインターフェイスは、ほとんどがDikumwareの独自のスレッドライブラリにあるスレッドインターフェイスからコピーされました。AFAIRは、さまざまなプラットフォームで実行され、WindowsスレッドとPOSIXスレッドの機能の共通部分としてそのインターフェイスを作成しました。

彼らが今それを「公式の」C11スレッドライブラリとして持っているかどうかはわかりませんが、それからそう遠くないはずです。

于 2013-02-28T19:27:08.823 に答える