c – 为什么需要将线程函数声明为’__cdecl’?
发布时间:2020-12-16 03:38:39 所属栏目:百科 来源:网络整理
导读:显示如何使用MFC创建线程的示例代码将线程函数声明为static和__cdecl.为什么需要后者?提升线程不打扰这个惯例,所以它只是一个时代错误吗? 例如(MFC): static __cdecl UINT MyFunc(LPVOID pParam){...}CWinThread* pThread = AfxBeginThread(MyFunc,...);
显示如何使用MFC创建线程的示例代码将线程函数声明为static和__cdecl.为什么需要后者?提升线程不打扰这个惯例,所以它只是一个时代错误吗?
例如(MFC): static __cdecl UINT MyFunc(LPVOID pParam) { ... } CWinThread* pThread = AfxBeginThread(MyFunc,...); 而提升: static void func() { ... } boost::thread t; t.create(&func); (代码示例可能不是100%正确,因为我不在IDE附近). __cdecl有什么意义?它在创建线程时有何帮助? 解决方法
__cdecl告诉编译器使用C调用约定(而不是stdcall,fastcall或编译器支持的任何其他调用约定).我相信,VC默认使用stdcall.
调用约定会影响诸如如何将参数压入堆栈(或者在fastcall的情况下为寄存器)以及谁从堆栈(调用者或被调用者)中弹出参数. 在Boost的情况下.我相信它使用模板特化来确定适当的函数类型和调用约定. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |