请问创建线程时,怎样给线程传递参数??
UINT ProxyThread(LPVOID pParam)
{
return NULL;
}
char a='a';
m_pServerThread=AfxBeginThread(&ServerThread,&a,
THREAD_PRIORITY_NORMAL,0,
CREATE_SUSPENDED);
这样可以把a的地址传过去吧?
可是在线程里怎么用不了a,比如char b=*a;有错误!
问题点数:20、回复次数:6Top
1 楼xt_jat(桑巴)回复于 2002-12-12 18:06:03 得分 3
你需要保证你在使用a时a还存在。
a是局部变量吗?Top
2 楼isdong(有些事情应该忘记)回复于 2002-12-12 18:08:04 得分 2
定义成static的Top
3 楼staticip(staticip)回复于 2002-12-12 18:10:01 得分 5
新线程ProxyThread和创建ProxyThread的线程是并发执行的,所以有可能创建ProxyThread的线程已经return,这样自动变量a就会被释放,这时ProxyThread线程正好执行道使用a的地方,这样就会访问一块已经被释放的内存,所以出错。
所以必须保证线程参数指针指向的地址,在线程使用它的所有地方都还有效。一般用自动变量都不能保证这点,所以要么用new/malloc动态内存分配,或者用static变量、类的数据成员一般都可以保证地址有效。
Top
4 楼chou16(doudou)回复于 2002-12-13 09:47:54 得分 0
我这次把char a='f';声明为了全局变量,可是还是不行。
UINT ProxyThread(LPVOID pParam)
{
return NULL;
}
在线程里:pParam 0x00416c1 char b
&b 0x00416c1 “f”
*pParam cxx0034: Error: types incompatible with operator
b 102 'f'
这是什么原因我还是无法得到变量b的值f?
LPVOID可不可以换成别的类型?
Top
5 楼efstudent(eaglefly)回复于 2002-12-13 10:13:50 得分 10
由于pParam是LPVOID的类型,因此需要强制转换,具体可以如下操作,
char *pChar = (char*)pParam;
祝你好运
Top
6 楼chou16(doudou)回复于 2002-12-13 10:38:11 得分 0
好的,多谢Top





