【问题标题】:CreateThread() errorCreateThread() 错误
【发布时间】:2011-06-27 09:34:16
【问题描述】:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>

    void Thread1( LPVOID param)
    {
      int a;
      a = *((int *)param);
      for (int i= 0; i <10; i++)
      printf("%d\n", a);
    }

    int main()
    {
      int a =4;
      int ThreadId;
      CreateThread( 0, 0x0100, Thread1, &a, 0, &ThreadId);

      for( int i = 0; i <11; i++)
          Sleep( 1);

      return( 1);
    }

这是一个简单的代码,但我无法弄清楚为什么 Visual Studio 给我错误:

错误 C2664:“CreateThread”:无法将参数 3 从“void (void *)”转换为“unsigned long (__stdcall *)(void *)” 范围内具有此名称的函数都不匹配目标类型 执行 cl.exe 时出错。

【问题讨论】:

  • 你能把Thread1的声明改成unsigned long __stdcall Thread1(LPVOID param)吗? (并返回一个整数?)
  • 是的,我改变了它,我得到了结果:但是为什么我在一开始就需要 unsigned long 或 DWORD 这种情况:当我声明它时,函数仍然给出错误“ void WINAPI Thread1( LPVOID参数)"

标签: visual-studio multithreading createthread


【解决方案1】:

定义如下

DWORD WINAPI MyThreadProc(LPVOID lpParameter)

CreateThread() 需要 __stdcall 调用约定。

【讨论】:

  • 是的,我改变了它,我得到了结果:但是为什么我在一开始就需要 unsigned long 或 DWORD 这种情况:当我声明它时,函数仍然给出错误“ void WINAPI Thread1( LPVOID参数)"
  • @college-kid 真的吗?似乎 LPTHREAD_START_ROUTINE 被定义为我所说的。 msdn.microsoft.com/en-us/library/aa964928.aspx
  • 那是因为 MyThreadProc 需要返回一个 DWORD。如果没有其他内容,则返回 0。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
相关资源
最近更新 更多