CreateThread()// GetLastError()返回87

时间:2011-08-26 01:27:05

标签: c++ multithreading

下面是一个创建线程的简单程序。我希望我遗漏了一些明显的东西。仅供参考 - 我是Win32的新手。

为什么线程执行中的GetLastError()返回87(ERROR_INVALID_PARAMETER)?

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

long WINAPI Run();

int _tmain(int argc, _TCHAR* argv[])
{
  DWORD id;

  HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Run, NULL, 0, &id);    

  // hThread is not NULL  

  DWORD err = GetLastError(); // returns 0

  int input;
  std::cin  >> input;

  return 0;
}

long WINAPI Run() 
{
    DWORD err = GetLastError(); // returns 87
    return 0;
}

1 个答案:

答案 0 :(得分:4)

GetLastError()函数仅在返回“失败”结果的Win32 API函数后立即调用时才返回有效结果。

在你的情况下,你正在调用GetLastError()作为新线程中的第一件事,这绝对不是在Win32 API函数调用之后的。

此外,每个帖子都有自己的“上一个错误”副本,因此它们不会互相踩踏。