【问题标题】:incompatible types when creating thread in Windows在 Windows 中创建线程时不兼容的类型
【发布时间】:2015-05-06 10:01:46
【问题描述】:

我创建了一个应用程序,我希望一个线程单独处理listen-UDP并让我成为一个缓冲区,但是当我尝试将它传递给线程时它说存在兼容性问题

hThread = CreateThread( 
          NULL,                   // default security attributes
          0,                      // use default stack size  
          start,       // thread function name
          &buffer,          // argument to thread function 
          0,                      // use default creation flags 
          &dwThreadId);

我的启动函数是

void start(buffer_t *buffer)
{

    SOCKET s;
    struct sockaddr_in server, si_other;
    int slen , recv_len;
    char buf[BUFLEN];
    WSADATA wsa;
}

错误是

1 IntelliSense:“void (*)(buffer_t *buffer)”类型的参数与“LPTHREAD_START_ROUTINE”类型的参数不兼容 c:\users\madihamalik\documents\visual studio 2010\projects\udp listener\udp listener\ listerner.c 189 12 UDP 监听器

【问题讨论】:

  • CreateThread 的线程例程需要匹配DWORD WINAPI ThreadProc(LPVOID)。那不是你给它的。因此错误。
  • 我能用它做什么?
  • 嗯,改变你的启动功能以符合预期?
  • 修复函数声明后,添加栈变量:char * buffer = theParameterName;像以前一样使用缓冲区。

标签: c multithreading visual-studio


【解决方案1】:

试试下面可能对你有帮助的代码..

DWORD start(LPVOID lpdwThreadParam)
{
    buffer_t *buffer = (buffer_t *)lpdwThreadParam; //Type cast your argument here
    SOCKET s;
    struct sockaddr_in server, si_other;
    int slen, recv_len;
    char buf[BUFLEN];
    WSADATA wsa;
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多