CreateThread()不起作用

时间:2017-10-08 08:41:54

标签: c++ c++11 winapi

我正在尝试使用winapi的CreateThread()函数创建一个线程,但它不起作用。完全没有错误

void Inc::init() {
    DWORD id;
    HANDLE hnd = CreateThread(NULL,0,asd,this,0,&id);
}
DWORD Inc::asd(LPVOID lparam) {
    Inc* g = (Inc*)lparam;
    printf("asd");
}

asd()根本没有执行

1 个答案:

答案 0 :(得分:3)

您没有发布我们可以帮助您调试的任何最小编译代码,因此,我要说的所有内容都是基于我在此主题上看到的其他问题的猜测:

  1. 确保asd被声明为staticCreateThread是一个C函数,对类方法一无所知
  2. 确保asd被声明为__stdcall,错误的调用约定可能会导致奇怪和意外的结果。
  3. 确保在线程完成运行之前不会销毁this
  4. 确保您的程序未完成之前线程完成运行。如果程序在线程更改打印之前退出,你不希望看到输出,对吧?将线程句柄存储在某处,并使用WaitForSingleObject确保线程工作完成。
  5. asd不会返回任何DWORD值。确保返回一些返回代码。
  6. 一般说明:

    1. 不使用C-casts,使用像static_cast
    2. 这样的C ++强制转换
    3. 标准库已经有一个线程对象:std::thread。考虑使用它。
    4. 与任何系统调用一样,必须检查任何系统调用的结果。如果返回的句柄为null,则应使用GetLastError检查上一个错误的值。