先说出我的疑问:线程之间可以共享局部变量吗?写了一个console程序:
在它的main()函数里面创建了一个对象,Endpoint instance;Endpoint是类名。然后又new了一个线程对象(用的不是mfc,是另一个基础类库pwlib,它里面提供了一个线程类PThread,创建该对象后自动启动一新的线程,在线程函数里面调用该类的虚拟成员函数Main()),
代码如下:
main()
{
....
Endpoint instance;
H323ListenerTCP * listener;//该类是个PThread的子类
listener = new H323ListenerTCP(instance, interfaceAddress, listenPort);
//后面两个参数不去管它,主要看第一个参数
.....}
再来看看线程对象里面的Main()函数:
Main()
{ while (listener.IsOpen()) {
H323Transport * transport = Accept(PMaxTimeInterval);
if (transport != NULL)
new H225TransportThread(instance, transport);//看到了吧,这里涌到了 另一个线程创建的局部变量instance,而且把她又传给了一个新的线程(H225TransportThread也是个线程类的派生类) }
这是程序运行的很好,我不知道为什么,每个线程步事都有自己的堆栈吗?instancey应该在主线程的堆栈里面,当运行其他线城时,又有自己新的堆栈了,这时instance 放在什么地方了,不明白,望高手指点。
在它的main()函数里面创建了一个对象,Endpoint instance;Endpoint是类名。然后又new了一个线程对象(用的不是mfc,是另一个基础类库pwlib,它里面提供了一个线程类PThread,创建该对象后自动启动一新的线程,在线程函数里面调用该类的虚拟成员函数Main()),
代码如下:
main()
{
....
Endpoint instance;
H323ListenerTCP * listener;//该类是个PThread的子类
listener = new H323ListenerTCP(instance, interfaceAddress, listenPort);
//后面两个参数不去管它,主要看第一个参数
.....}
再来看看线程对象里面的Main()函数:
Main()
{ while (listener.IsOpen()) {
H323Transport * transport = Accept(PMaxTimeInterval);
if (transport != NULL)
new H225TransportThread(instance, transport);//看到了吧,这里涌到了 另一个线程创建的局部变量instance,而且把她又传给了一个新的线程(H225TransportThread也是个线程类的派生类) }
这是程序运行的很好,我不知道为什么,每个线程步事都有自己的堆栈吗?instancey应该在主线程的堆栈里面,当运行其他线城时,又有自己新的堆栈了,这时instance 放在什么地方了,不明白,望高手指点。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货