通常调用函数意味着线程

时间:2010-08-08 19:04:00

标签: c++ multithreading crash stdcall

我有原型

的功能
DWORD WINAPI blah(LPVOID arg);

这意味着与CreateThread一起用于线程应用程序。

我用CreateThread调用它没有任何问题。但是在代码中的其他地方,我通常称之为blah(NULL)。当它到达这个部分时,它会崩溃。这是因为WINAPI部分使它__stdcall而你不能只调用__stdcall函数吗?

2 个答案:

答案 0 :(得分:2)

这不是因为__stdcall。在调试器中启动程序并检查代码的哪一行会导致崩溃。

答案 1 :(得分:0)

唯一的问题是如果blah()专门调用TerminateThread(自我)结束,而不是仅仅返回底部。 CreateThread调用设置了返回地址,这样当blah()返回时,它会调用TerminateThread

如果 blah()没有这样的代码,那么需要检查代码以查看它是否以某种方式执行某些线程特定的操作使其失败。另外,我想不出其他任何东西(除了TerminateThread()),这可能会导致代码写入一个线程,阻止它被直接调用。