Rob*_*Rob 6 c++ mfc multithreading boost
显示如何使用MFC创建线程的示例代码将线程函数声明为静态和__cdecl.为什么需要后者?提升线程不打扰这个惯例,所以它只是一个时代错误吗?
例如(MFC):
static __cdecl UINT MyFunc(LPVOID pParam)
{
...
}
CWinThread* pThread = AfxBeginThread(MyFunc, ...);
Run Code Online (Sandbox Code Playgroud)
而提升:
static void func()
{
...
}
boost::thread t;
t.create(&func);
Run Code Online (Sandbox Code Playgroud)
(代码示例可能不是100%正确,因为我不在IDE附近).
__cdecl有什么意义?它在创建线程时有何帮助?
__cdecl 告诉编译器使用 C 调用约定(而不是 stdcall、fastcall 或编译器支持的任何其他调用约定)。我相信,VC++ 默认使用 stdcall。
调用约定会影响参数如何压入堆栈(或寄存器,在快速调用的情况下)以及谁将参数从堆栈中弹出(调用者或被调用者)等。
在升压的情况下。我相信它使用模板专业化来找出适当的函数类型和调用约定。
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |