Windows上的C11线程

时间:2013-02-28 17:37:53

标签: c++ windows multithreading c11

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

有人知道该怎么做吗?

3 个答案:

答案 0 :(得分:9)

Visual Studio 2012不支持C11的线程化(微软已多次声明它对保持与C的关联并不太感兴趣,更喜欢专注于C ++),但它 支持C ++ 11的std::thread and related facilities。如果您正在编写C ++,那么您应该可以使用它们而不是C的线程库。

答案 1 :(得分:1)

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

https://gist.github.com/yohhoy/2223710处还有一个仿真库。

答案 2 :(得分:0)

C11线程接口主要是从他们的propretary线程库中的Dikumware线程接口复制而来。 AFAIR他们的东西在不同的平台上运行,他们创建了该接口作为Windows线程和POSIX线程的功能的交集。

他们现在是否具有“官方”C11线程库,我不知道,但它应该离它不远。