0

总结问题:在线程外部的函数中监视线程变量的最佳方法是什么?

原始问题:我希望更好地了解使用 Windows 线程时的最佳实践。我知道有更现代的线程方法,但我仅限于使用 CreateThread。当前设置在 CreateThread 调用的函数内包含一个 WaitForSingleObject 函数,该函数更新一些指针。我需要在线程外部访问这些指针。在 WaitForSingleObject 函数中访问数据的最佳实践是什么?使用 LPVOID params 参数将参数传递给函数很简单,但除了线程 ID 和使用全局变量之外似乎没有输出选项。

HANDLE WINAPI CreateThread( __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, __in SIZE_T dwStackSize, __in LPTHREAD_START_ROUTINE lpStartAddress, __in_opt LPVOID lpParameter, __in DWORD dwCreationFlags, __out_opt LPDWORD lpThreadId ); 
4

1 回答 1

0

感谢阿德里安的建议。将指针传递给结构有效。工作代码的简化版本如下。

#include <Windows.h>
#include <iostream>

struct MyStruct {
    int var;
};

DWORD WINAPI mythread(LPVOID lpParameter)
{
    MyStruct *PSTRUCT = (MyStruct*)lpParameter;
    PSTRUCT->var = 22;
    std::cout << "Thread function value: " << PSTRUCT->var << std::endl;
    return 0;
}

int main(int argc, char* argv[])
{
    MyStruct *PSTRUCT;
    HANDLE myhandle;
    DWORD mythreadid;

    PSTRUCT = reinterpret_cast<MyStruct*>(HeapAlloc(GetProcessHeap(), 0, sizeof(MyStruct)));
    PSTRUCT->var = 0;
    myhandle = CreateThread(0, 0, mythread, (LPVOID)PSTRUCT, 0, &mythreadid);
    WaitForSingleObject(myhandle, INFINITE);
    std::cout << "Main function value: " << PSTRUCT->var << std::endl;
    getchar();
    return 0;
}
于 2019-10-07T19:36:54.820 回答