#include<Windows.h>
#include<iostream>
using namespace std;
DWORD WINAPI vMain(PVOID);
DWORD WINAPI vMainCopy(PVOID);int main(void) 

DWORD dwThreadID;
HANDLE g_hThread;
g_hThread=CreateThread(NULL,0,vMain,NULL,CREATE_SUSPENDED,&dwThreadID);
if(GetLastError()==ERROR_SUCCESS)
{
SetThreadPriority(g_hThread,THREAD_PRIORITY_HIGHEST);
ResumeThread(g_hThread);
}
system("pause");
return 0;
}
DWORD WINAPI vMain(PVOID pParam)
{
DWORD dwThreadID;
HANDLE g_hThread;
g_hThread=CreateThread(NULL,0,vMainCopy,NULL,CREATE_SUSPENDED,&dwThreadID);
if(GetLastError()==ERROR_SUCCESS)
{
SetThreadPriority(g_hThread,THREAD_PRIORITY_HIGHEST);
ResumeThread(g_hThread);
}
  return (DWORD)0;
}
DWORD WINAPI vMainCopy(PVOID pParam)
{
DWORD dwThreadID;
HANDLE g_hThread;
g_hThread=CreateThread(NULL,0,vMain,NULL,CREATE_SUSPENDED,&dwThreadID);
if(GetLastError()==ERROR_SUCCESS)
{
SetThreadPriority(g_hThread,THREAD_PRIORITY_HIGHEST);
ResumeThread(g_hThread);
}
  return (DWORD)0;
}
我用调试器断点跟踪的时候,发现主线程创建的子线程执行vMain()时,vMain()函数执行CreateThread()时,我用GetLastError()获得“参数错误”的标志,然后CreateThread()也没创建线程,求指点错误

解决方案 »

  1.   

    先判断g_hThread是否正常,再GetLastError
      

  2.   

    听了你的建议,我特意把g_hThread初始化为NULL,然后调用CreateThread()后,g_hThread的值为0x00000048,我觉得应该是正常的,但为什么CreateThread()没有创建新线程,求继续指点
      

  3.   

    因为你的getlasterror不为ERROR_SUCCESS 所以没ResumeThread  线程是CREATE_SUSPENDED挂起状态
      

  4.   

    楼主你这逻辑是死循环逻辑啊。你仔细看看vMainCopy和vMain在重复对调啊
      

  5.   

    哦,明白了,还有最后一个问题,为什么GetLastError不为ERROR_SUCCESS呐,求继续指点
      

  6.   

    听了你的建议,我特意把g_hThread初始化为NULL,然后调用CreateThread()后,g_hThread的值为0x00000048,我觉得应该是正常的,但为什么CreateThread()没有创建新线程,求继续指点看错了,调用了CreateThread的确创建了新线程,但为什么GetLastError会是参数错误的标志呐
      

  7.   


    getlasterror是获取最后错误的标志   CreateThread成功还是失败首先看的是返回值 返回值已经表示成功了说明这个getlasterror的标志根本就不是你这个CreateThread的错误原因  又何必纠结?
      

  8.   

    GetLastError 返回什么错误 ?http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx
      

  9.   

    可能是很久很久以前的lastError,API失败一般会SetLastError,但成功不一定会清空lastError,如果你实在要用lastError,可以在调用某个函数前 SetLastError(0);
      

  10.   

    // GetLastError()获取的是最后发生的错误。
    // 如果你CreateThread成功了(根据返回值判断),这个时候GetLastError()得到了是另外函数执行失败设置的错误,不是CreateThread设置的
      

  11.   

    好吧,我在考虑为什么GetLastErro会失败,谢谢各位了
      

  12.   


    getlasterror是获取最后错误的标志   CreateThread成功还是失败首先看的是返回值 返回值已经表示成功了说明这个getlasterror的标志根本就不是你这个CreateThread的错误原因  又何必纠结?好吧,谢谢了