vc多线程参数传递问题
如果我想要创建两个同级线程,并且这两个线程之间需要相互知道对方及自己的handle,以便出现问题时,能够互相把threadkill掉,应该怎样解决?注意主线程是不知道究竟...
如果我想要创建两个同级线程,并且这两个线程之间需要相互知道对方及自己的handle,以便出现问题时,能够互相把thread kill掉,应该怎样解决?注意主线程是不知道究竟有多少个子线程的,因此最好不要用全局变量处理。谢谢大家了!
展开
2个回答
展开全部
可以这样做:
为线程参数定义一个结构体
struct threadParam
{
HANDLE* self;
HANDLE* other;
//还可以定义一些其他你认为需要的参数
};
//假设有2个线程A、B
HANDLE *HA = new HANDLE;
HANDLE *HB = new HANDLE;
threadParam *pA = new threadParam;
PA->self = HA;
PA->other = HB;
*HA = createthread(NULL,funcA,PA,....);
将PA做为参数传递给线程A。这样就可以在线程函数里通过指针使用a,b的线程句柄了。
同样创建b线程的时候这样做一遍就ok。
不知道这样说明白否?
为线程参数定义一个结构体
struct threadParam
{
HANDLE* self;
HANDLE* other;
//还可以定义一些其他你认为需要的参数
};
//假设有2个线程A、B
HANDLE *HA = new HANDLE;
HANDLE *HB = new HANDLE;
threadParam *pA = new threadParam;
PA->self = HA;
PA->other = HB;
*HA = createthread(NULL,funcA,PA,....);
将PA做为参数传递给线程A。这样就可以在线程函数里通过指针使用a,b的线程句柄了。
同样创建b线程的时候这样做一遍就ok。
不知道这样说明白否?
展开全部
说什么的概念。
COM操作,这将有其自己的的交叉线程和进程模型,这是一个复合模型,得出约7-8组合。学习COM,这是一定要彻底了解。业主的帮助文档阅读CoInitializeEx的功能,可以或多或少的经验。如果你不好好学习,看MSDN帮助文档,如坠云里雾里一般,这是很难理解的。因此,建议买这本书的COM,略见,其次线上,如CSDN有很多热心人写的关于多线程的进程内COM模型,并使用规则,优点和缺点,你可以阅读!
在MFC中,通过跨线程的变量的危险形成,这个概念可能不太可能。因此,在MFC中,我们似乎可以随意通过线程之间的变量,但其实是不正确的,典型的是主线程创建窗口和控制,最好不要直接操作其他线程,线程之间的方法,而是通过通信,这样主线程创建窗口和控件的操作窗口和控件。
因此,变量不能乱传的土地的COM,这个限制是非常明显的COM概念称为元帅的代理,STUB,当然,这主要是相关的过程相同的概念描述非线程创建的东西,,不是线程有将是一个问题。
接口的观点一样,这个接口不是轻易就能传递给工作线程的线程。
我的建议是:
内置的工作线程,因为数据库操作和反馈程序级的数据从数据库中需要进行再加工,这些步骤可以是非常耗时的,耗时的操作上UI线程,界面线程不能处理WM_XXX消息接口的假死。智能指针一样,这种事情上独立的管理工作线程,工作线程通过智能指针到数据库中的数据,然后再进行处理,存储的数据结果,如全局变量,虚拟内存,和其他地方的惯例程序。数据是通过自定义的消息发送到UI线程的自定义消息能够显示自定义消息,数据将被保存到该界面,这样的界面线程发送线程消息的功能是PostThreadMessage。
微妙的细节也可以考虑,到底是要创建自己的线程或使用线程池。凭借丰富的经验,会考虑很多问题,关键是要学习理论知识和实践不能。
最后,是矫正的概念,_ConnectionPtr它是一个标准的C + +类,C + +类可以重载 - >运算符,这个指针运算符被重载,类的实例变量在实际使用,其行为更像是一个指针,而不是一个普通的变量重载指针操作是智能指针,而不是指_ConnectionPtr类是一个智能指针,最多,它是一个智能指针类,我所看到的已转化为一个智能指针英文原版的SMART的指针。
COM操作,这将有其自己的的交叉线程和进程模型,这是一个复合模型,得出约7-8组合。学习COM,这是一定要彻底了解。业主的帮助文档阅读CoInitializeEx的功能,可以或多或少的经验。如果你不好好学习,看MSDN帮助文档,如坠云里雾里一般,这是很难理解的。因此,建议买这本书的COM,略见,其次线上,如CSDN有很多热心人写的关于多线程的进程内COM模型,并使用规则,优点和缺点,你可以阅读!
在MFC中,通过跨线程的变量的危险形成,这个概念可能不太可能。因此,在MFC中,我们似乎可以随意通过线程之间的变量,但其实是不正确的,典型的是主线程创建窗口和控制,最好不要直接操作其他线程,线程之间的方法,而是通过通信,这样主线程创建窗口和控件的操作窗口和控件。
因此,变量不能乱传的土地的COM,这个限制是非常明显的COM概念称为元帅的代理,STUB,当然,这主要是相关的过程相同的概念描述非线程创建的东西,,不是线程有将是一个问题。
接口的观点一样,这个接口不是轻易就能传递给工作线程的线程。
我的建议是:
内置的工作线程,因为数据库操作和反馈程序级的数据从数据库中需要进行再加工,这些步骤可以是非常耗时的,耗时的操作上UI线程,界面线程不能处理WM_XXX消息接口的假死。智能指针一样,这种事情上独立的管理工作线程,工作线程通过智能指针到数据库中的数据,然后再进行处理,存储的数据结果,如全局变量,虚拟内存,和其他地方的惯例程序。数据是通过自定义的消息发送到UI线程的自定义消息能够显示自定义消息,数据将被保存到该界面,这样的界面线程发送线程消息的功能是PostThreadMessage。
微妙的细节也可以考虑,到底是要创建自己的线程或使用线程池。凭借丰富的经验,会考虑很多问题,关键是要学习理论知识和实践不能。
最后,是矫正的概念,_ConnectionPtr它是一个标准的C + +类,C + +类可以重载 - >运算符,这个指针运算符被重载,类的实例变量在实际使用,其行为更像是一个指针,而不是一个普通的变量重载指针操作是智能指针,而不是指_ConnectionPtr类是一个智能指针,最多,它是一个智能指针类,我所看到的已转化为一个智能指针英文原版的SMART的指针。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询