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