为Windows实现C11线程

时间:2017-06-23 07:25:45

标签: c winapi pthreads

我有一个用pthreads创建线程的头文件(C11)。现在我想创建另一个可以为Windows操作系统(WIN32)选择的标头。我目前正在努力开始,主要是因为它是保持功能签名的要求,我不明白如何处理这个问题。这是我的问题:

C11标题摘要:

/* types */
typedef pthread_t thrd_t;
typedef pthread_mutex_t mtx_t;
typedef pthread_cond_t cnd_t;
typedef pthread_key_t tss_t;
typedef pthread_once_t once_flag;

typedef int (*thrd_start_t)(void*);
typedef void (*tss_dtor_t)(void*);

static inline int thrd_create(thrd_t *thr, thrd_start_t func, void *arg)
{
    return pthread_create(thr, 0, (void*(*)(void*))func, arg) == 0 ? thrd_success : thrd_error;
}

WIN32(我到目前为止):

/* types */
typedef HANDLE thrd_t;

static inline int thrd_create(thrd_t *thr, thrd_start_t func, void *arg)
{
    thrd_t = CreateThread(
          _In_      SIZE_T                 dwStackSize,
          _In_      LPTHREAD_START_ROUTINE lpStartAddress,
          _In_      DWORD                  dwCreationFlags,
        );
    return pthread_create(thr, 0, (void*(*)(void*))func, arg) == 0 ? thrd_success : thrd_error;
}

我故意粘贴了CreateThread()的签名来解释我的问题:我现在如何使用(thrd_t *thr, thrd_start_t func, void *arg)输入CreateThread()?我的意思是,我既没有StackSize,也没有任何CreationFlags。

我想我在某个地方出错了,但我不知道在哪里。如果我能理解这篇文章,我可以自己做其余的标题。我知道有解决方案,但我想理解这一点。

1 个答案:

答案 0 :(得分:-1)

如果可能,您应该使用Standard Thread Library