【发布时间】:2013-01-09 23:24:37
【问题描述】:
我正在尝试制作一个基本的线程管理器。您可能已经看到我之前的一个问题,其中我提出了一些错误的代码,而我仍在处理该代码!但是我被卡住了,因为我希望能够调用函数 GetExitCodeThread(HANDLE, LPDWORD),但是我在实现它时遇到了麻烦。我遇到的第一个问题我想我知道我需要做什么,但我不知道如何实现它。我最初是在安全属性设置为 NULL 的情况下调用 CreateThread,从外观上看,我需要将其设置为 THREAD_QUERY_INFORMATION,但是我不知道如何填充它想要的 LPSECURITY_ATTRIBUTES 结构。 msdn的结构是:
typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
但我不知道如何用 THREAD_QUERY_INFORMATION 填充它,而且我不明白我用什么填充结构的其他部分。
我想如果我设置了创建线程的安全属性,我应该能够调用GetExitCodeThread,然后我的代码应该可以工作......有没有人有任何在创建线程时设置安全属性的示例代码我可以看看和参考吗?以及关于更好地理解 Windows 库的任何建议?
【问题讨论】:
-
我想出了如何使这项工作,我实际上并不需要 security_attributes 结构。但是,我仍然想要更多关于如何使用它的信息,而且我对 msdn 网站的描述感到困惑。所以任何澄清都会很好!
-
请使用
_beginthreadex而不是CreateThread。 -
为什么使用 _beginthreadex 而不是 CreateThread 更好?
-
来自MSDN:“调用C运行时库(CRT)的可执行文件中的线程应该使用
_beginthreadex和_endthreadex函数进行线程管理,而不是CreateThread和ExitThread;这需要使用 CRT 的多线程版本。如果使用CreateThread创建的线程调用 CRT,CRT 可能会在内存不足的情况下终止进程。 --- 另外,使用_beginthreadex允许您使用线程句柄等待线程退出。您必须自己关闭手柄。 -
@paddy "另外,使用
_beginthreadex允许您使用线程句柄来等待线程退出。您必须自己关闭句柄" - 当也打电话给CreateThread。因此,_beginthreadex与CreateThread的唯一论据是 CRT 要求。
标签: c++ c windows multithreading