您仍然可以在构建时将参数传递给您的工作线程。但是不要将您的状态变量的副本传递给它(因为正如您所说,它们“仅在某个时间点捕获主线程的状态”,即工作线程创建时间)。
相反,将它的指针(或引用)传递给您的状态变量。
因为它们是指针,所以您的工作线程将可以访问来自主线程的最新数据,而无需使用全局变量。
下面是一个伪代码示例(没有任何同步机制,如互斥锁):
DWORD MyThreadFunction( LPVOID argument );
int main()
{
bool mySyncVar = false;
bool* mySyncVarPtr = &mySyncVar;
CreateThread(
NULL, // default security attributes
0, // use default stack size
MyThreadFunction, // thread function name
mySyncVarPtr, // argument to thread function--NOTE THAT THIS IS
// A POINTER TO THE SYNC VARIABLE
0, // use default creation flags
NULL); // returns the thread identifier
for (...)
{
// Do stuffs
mySyncVar = true; // Will trigger worker thread
// ...
}
return 0;
}
DWORD MyThreadFunction( LPVOID argument )
{
bool* syncPtr = reinterpret_cast<bool*>(argument); // Remember this
// is a pointer
for (...)
{
while (false == *syncPtr)
{
// Wait...
}
// Trigger
// Update your buttons now
}
}