C++ CreateThread()不工作
我正在尝试使用winapi的CreateThread函数创建线程,但它不起作用。完全没有错误C++ CreateThread()不工作,c++,c++11,winapi,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根本不会执行您没有发布任何我们可以帮助您调试的最小编
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根本不会执行您没有发布任何我们可以帮助您调试的最小编译代码,因此,我要说的一切都是基于我在本主题中看到的其他问题的猜测: 确保asd声明为静态,CreateThread是一个C函数,对类方法一无所知 确保asd已声明为u stdcall,错误的调用约定可能会导致奇怪和意外的结果。 确保在线程完成运行之前不会销毁此文件。 确保程序没有在线程完成运行之前完成。您不希望在线程得到打印内容的更改之前看到程序是否退出,对吗?将线程句柄存储在某个位置,并使用WaitForSingleObject确保线程工作已完成。 asd不返回任何DWORD值。确保返回一些返回代码。 一般说明: 不要使用C型铸件,使用C++的浇铸方式 标准库已经有一个线程对象:std::thread。考虑使用它。 与任何系统调用一样,您必须检查任何系统调用的结果。如果返回的句柄为null,则应使用GetLastError检查最后一个错误的值。
你确定它没有运行吗?可能是缓冲问题,因为打印的字符串不会刷新。尝试在打印的字符串中添加尾随换行符。也许还可以学习如何使用调试器在线程函数中设置断点以查看它的执行情况。您可能还应该检查CreateThread返回的内容。寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。请阅读如何创建and。@Someprogrammerdude,Windows从不使用行缓冲,因此添加换行不会有任何区别。好吧,如果他使用的是第三方C运行时,那就不太可能了。如果这是一个32位应用程序,线程函数必须声明为WINAPI。我猜你忽略了我们看不到的转换错误。