我正在Windows上的Visual Studio 2012 Express中创建跨平台软件。出于显而易见的原因,我无法使用.NET的System::Threading::Thread
。我希望在使用VS2012时可以使用C11(threads.h
,而不是pthread.h
)的新线程功能,因为我创建了一个基于.NET表单的抽象框架。我开始相信Windows是不可能的。有人有想法吗?如果那些是我唯一的选择,我将只使用C ++库(boost和std)。
有人知道该怎么做吗?
答案 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)}));
}
答案 2 :(得分:0)
C11线程接口主要是从他们的propretary线程库中的Dikumware线程接口复制而来。 AFAIR他们的东西在不同的平台上运行,他们创建了该接口作为Windows线程和POSIX线程的功能的交集。
他们现在是否具有“官方”C11线程库,我不知道,但它应该离它不远。