我有一个用线程创建线程的头文件(C11)。现在我想创建另一个可以选择用于Windows操作系统(WIN32)的头文件。我目前正在努力开始,主要是因为它需要保持函数签名,我不明白如何处理这个问题。这里是我的问题:为窗口实现C11线程
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。
我想我在某个地方会出错,但我不知道在哪里。如果我设法理解这篇文章,我可以自己完成标题的其余部分。我知道那里有解决方案,但我想理解这一点。
*为什么*你想在Windows API上实现自己的* pthreads *?这已经完成了(但可能比只是一个标题更多的工作),并且可以很好地工作,例如,在我的* MinGW *安装。对于C11线程,你可以[使用这个头文件](https://github.com/jtsiomb/c11threads/blob/master/c11threads.h)* pthreads *可用。 –
好的,我解释得很糟糕:我不想在windows上实现pthreads。我想在窗口上使用C11线程,并用windows挂件替换pthreads。 – PKlumpp
您可能会在[现有实现](https://locklessinc.com/downloads/winpthreads.h)中找到一些灵感。 'Stacksize 0'代表使用[这里]解释的默认值(https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v = vs.85).aspx)。 –