今天看一篇介绍套间的文章,感觉写得很清晰。http://www.vckbase.com/document/viewdoc/?id=1597不过其中说,在一个线程中(主线程)在创建线程时候,把在主线程得到的组件接口指针传递给另一个线程,这个做法是不正确的。这个是为什么呢?然后我自己做了个实验,发现实验中的地址并未发生改变。不知原因,向大家请教了!
// thread func
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
int *b = reinterpret_cast<int*>(lpParam);
printf("In Thread, The Address of the parameter is: %p \nand the value is: %d\n", b, *b); return 0;
}int main(void)
{
int a = 5;
DWORD dwThreadID = -1;
printf("in main, the address of parameter is : %p\n", &a);
HANDLE hThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (LPVOID)&a, 0, &dwThreadID); if (hThread == NULL)
{
std::cout << "CreateThread failed!" << endl;
return 0;
}
else
{
::WaitForSingleObject(hThread, INFINITE);
} return 0;
}
// thread func
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
int *b = reinterpret_cast<int*>(lpParam);
printf("In Thread, The Address of the parameter is: %p \nand the value is: %d\n", b, *b); return 0;
}int main(void)
{
int a = 5;
DWORD dwThreadID = -1;
printf("in main, the address of parameter is : %p\n", &a);
HANDLE hThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (LPVOID)&a, 0, &dwThreadID); if (hThread == NULL)
{
std::cout << "CreateThread failed!" << endl;
return 0;
}
else
{
::WaitForSingleObject(hThread, INFINITE);
} return 0;
}
解决方案 »
- 200分 关于Static控件 求一方法 可以有弹性,动态地 管理 或 方便的 改变 Static text 控件的位置 及 大小
- 在 COMBOX中怎样获得上次选中数据
- atl中,怎么设置wndproc 钩子,来达到处理消息。
- VC6中,为什么只有类中的static成员函数,才可以做为线程启动函数(ThreadProc)?
- 為什麼會出現CDialog::PreModal()的函數體中Assert(m_hWnd==NULL)的錯誤!急!!急!!在線等!!
- 如何在一个Button上加上一个bitmap
- 关于CByteArray的一点疑惑???
- 如何查找到具体那一块代码出现内存泄漏?
- 可执行文件生成后,怎么把相关的DLL文件绑在一起?
- MessageBox和AfxMessageBox有什么区别??
- 动态生成控件的循环显示
- C#导入COM组件
当你在线程中创建一个组件时,你得组件接口方法运行的空间不一定是在你的创建线程空间中.线程直接的接口必须使用CoMarshalInterThreadInterfaceInStream/CoGetInterfaceAndReleaseStream来传递COM接口