有一个多线程方面的问题?(50分)

  • 主题发起人 tangzwei
  • 开始时间
T

tangzwei

Unregistered / Unconfirmed
GUEST, unregistred user!
请部在VC++中,多线程执行的函数体一定要是全局的吗?
不是请一定举例说明了。比如:在一个CDialog类中,加入一
进度条,在一个线程中调用这个进度条,使之不停的动。
 
不会吧!等了一晚没有人答啊,真让有点失望了。
 
线程执行函数一定是全局的
不可以是类的成员等.
也可以用线程类
 
是privater保护的
 
Synchronize()这个是吗?
 
在线程中发送消息给DIALOG
 
也可以是c++类的static类成员函数
 
忘了解释,线程执行函数其实就是windows的callback函数类型,而类成员函数是靠着this指针
才得到正确对象的数据(调用时是传递this指针参数,即一般类成员函数的最后一个参数),
但是windows并不借助任何对象调用callback函数,也就没有传递this指针
给callback函数,而导致堆栈中有一个随即变量会成为this指针,因而很容易造成程序的
崩溃,而如果你将线程执行函数定义成为static类成员函数,根据static的特性它不属于
任何对象,而只是类的一部分,因此不会传递this指针作为参数给你的线程执行函数,这样
就安全,何况使用static的特性,符合oo精神.
 
谢谢上面的兄弟!总算有人来了。
我只是想在VC++中多线程没有Delphi中那么方便。
比如:在一个CDialog类中,加入一
进度条,在一个线程中调用这个进度条,使之不停的动。
在Delphi中很容易实现,而在VC++中我就不知道怎么实现了。
有谁能写一个这样的小例子,我绝对加分.
 
to cqt:
在线程中发送消息给DIALOG怎么发了?
 
你可以把CDialog类的指针当做线程的函数参数传给它,不就可以在线程里处理你的Dialog
了吗?
 
这是我才写的一个程序,给你吧!但是不全,只是线程函数。算了,还是给你告诉你一个方法吧!
线程要和消息结合起来才行,还要定义一个表示进度条当前值的全局变量,在这个值发生变化时就发送一个消息(用户自定消息),再编一个消息映射函数,在这个函数中改变进度条的值就行了。
注意,在用线程时,一定要先掌握如何结束线程。在线程中设定一个循环变量(全局),然后可以定义一个按钮,再编按钮的单击事件代码,代码的作用很简单,就是让这线程中循环的条件不成立
。如果还不行就告诉我你的EMAIL,我把我编的一个小程序发给你。
 
楼上的兄弟,我的E-mail:tangzhiwei@263.net
这个其实我也解决了.当然我也想看你的方法了.交流吗?
 
顶部