6

我正在 Windows 上的 Visual Studio 2012 express 中创建跨平台软件。由于显而易见的原因,我不能使用 .NET 的System::Threading::Thread. 我希望在使用 VS2012 时可以使用 C11 的新线程特性(threads.h不是pthread.h),因为我创建了一个基于 .NET 表单的抽象框架。我开始相信 Windows 是不可能的。有人有想法吗。如果这些是我唯一的选择,我只会使用 C++ 库(boost 和 std)。

有没有人知道该怎么做?

4

3 回答 3

11

Visual Studio 2012 不支持 C11 的线程(微软一再声明它对与 C 保持同步没有兴趣,更愿意专注于 C++),但它确实支持 C++11 的std::thread 和相关工具。如果您正在编写 C++,则可以说无论如何都应该使用它们而不是 C 的线程库。

于 2013-02-28T17:46:38.317 回答
6

Visual Studio 2017 包含一个xthreads.hthreads.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 回答