我在多次调用线程时遇到问题,并且变量搞砸了。我是线程新手,所以我确定我错过了一些简单的东西。
struct PARAMS
{
time_t secondsAtStart;
};
DWORD WINAPI ProcessChange(void* parameter) {
PARAMS* params = (PARAMS*)parameter;
Sleep(3000);
_tprintf(TEXT("Seconds: (%d)\n"), params->secondsAtStart);
return 0;
}
void FileChanged(CString filename, CString action) {
struct PARAMS *params = NULL;
params = (struct PARAMS *)malloc(sizeof(PARAMS)+1);
params->secondsAtStart = time(null);
// I've also tried it this way.
//PARAMS params;
//params.secondsAtStart = time(NULL);
HANDLE hThread = CreateThread(NULL, 0, ProcessChange, ¶ms, 0, NULL);
// If I uncomment this, it works, but just one thread runs at a time.
//WaitForSingleObject(hThread, INFINITE);
}
如果我不取消注释 WaitForSingleObject,那么 secondsAtStart 变量就会损坏。我需要的最终结果是,如果 FileChanged 一个接一个地被调用 3 次,我将让前两次运行什么都不做,最后一次运行。
谢谢,本