首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • vc 多线程问题 菜鸟勿进
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • leeosun
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-23 19:56:14 楼主
    vc的多线程编程中,线程函数里的变量,对象等等必须全是全局或静态的吗?能够直接使用类实例中的变量吗?
    望高手解答?谢谢
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizhigang34
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:11:581楼 得分:0
    我是菜鸟,特意进来看看..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qzt6666
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:28:232楼 得分:0
    你的类实例是在哪里定义的?是全局的还是当作参数传入的?如果类实例是全局或静态的,当然可以使用。如果类实例是局部变量,只要这个实例不影响别的线程,也可以用。另外,你的线程最好别写到类里。你写个例子,可以帮你看看。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • season030441
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 09:24:593楼 得分:0
    线程函数中使用变量时要么是在自己函数内部定义的局部变量,要么是外部的全局变量或者是静态变量,否则编译就会出错,对于类对象也是适用的。如果说你想在线程函数中改变外部变量的值,通常都是将这些外部变量都组合在一个结构体内,然后将该结构体对象的指针传递进去
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • szblove
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 09:28:064楼 得分:0
    引用 3 楼 season030441 的回复:
    线程函数中使用变量时要么是在自己函数内部定义的局部变量,要么是外部的全局变量或者是静态变量,否则编译就会出错,对于类对象也是适用的。如果说你想在线程函数中改变外部变量的值,通常都是将这些外部变量都组合在一个结构体内,然后将该结构体对象的指针传递进去


    学习。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ringphone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 14:18:565楼 得分:0
    这个看你线程函数怎么写了,如果你创建线程的时候传个类实例对象的指针,然后在线程函数里调用该对象的成员函数,就可以使用类实例中的变量。例:
    C/C++ code
    DWORD gThreadProc(LONG); class a { public: void StartThread(); DWORD ThreadProc(); ... } void a::StartThread() { DWORD gdwThreadId = 0; CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)gThreadProc,this,0,&gdwThreadId); } DWORD gThreadProc(LONG lParam) { a* pThis = (a*)lParam; return pThis->ThreadProc(); }

    全局的线程函数又转到了类成员函数,在a::ThreadProc()里面可以访问哪些变量就不用我说了吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • babanake
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-28 16:38:096楼 得分:0
    菜鸟误进!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • stone_clock
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-28 16:47:117楼 得分:0
    1. 线程函数里的变量、对象与普通函数没有什么区别。
    2. 线程函数中访问全局、静态变量或对象时,需要线程同步。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyunffu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-28 17:52:418楼 得分:0
    线程函数必须是全局或类静态函数。
    如果要访问类内部成员,需要在启动线程时将类对象指针传入线程函数。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pangqi022
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-28 19:38:169楼 得分:0
    为啥不让进啊?
    问的不也是菜鸟问题么?...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizhigang34
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-28 19:51:5810楼 得分:0
    引用 9 楼 pangqi022 的回复:
    为啥不让进啊?
    问的不也是菜鸟问题么?...

    楼主是看不起菜鸟..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lhsxsh
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 12:02:0711楼 得分:0
    引用 10 楼 lizhigang34 的回复:
    引用 9 楼 pangqi022 的回复:
    为啥不让进啊?
    问的不也是菜鸟问题么?...

    楼主是看不起菜鸟..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • c38041125
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 12:23:5412楼 得分:0
    楼主就很菜,所以不让菜鸟进
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • PC_1997
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 12:32:2713楼 得分:0
    线程函数也是一个函数,起作用的依然是变量的作用域啊
    如果线程不是类的成员函数,对类的访问自然要遵从访问规则
    不要把线程函数看得太特别,基本规则是不会变的

    如果在线程里面访问全局变量,一定要小心同步和互斥的问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • deryker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 12:52:4514楼 得分:0
    只要向线程传递类的指针就可以调用类成员变量和成员函数了。


    不要打击楼主啊,楼主加油!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cricketol
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 13:02:0115楼 得分:0
    对象等等必须全是全局或静态的吗?
    不一定要是全局或静态的,如3楼"线程函数中使用变量时要么是在自己函数内部定义的局部变量,要么是外部的全局变量或者是静态变量"

    -------------------------------------------------
    能够直接使用类实例中的变量吗?
    可以,如果要使用某个类实例的变量,就把该类的指针传如线程中,在线程里使用该指针即可,如下:
    C/C++ code
    class A { int b; }; DWORD MyThread(LPVOID param); A aa; DWORD id; CreateThread(NULL,NULL,MyThread,(LPVOID)&aa,NULL,&id); //在线程里面 DWORD MyThread(LPVOID param) { A *p = (A *)param; p->b = 5; //这里就可以直接使用类实例里面的变量了 return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • exceed_me
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 13:10:1216楼 得分:0
    引用 1 楼 lizhigang34 的回复:
    我是菜鸟,特意进来看看..

    呵呵,有意思
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyq_leaf
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 13:10:5517楼 得分:0
    楼主只是为了吸引大家的眼球才这样写的!!


    进来看菜鸟来了!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiandayong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-29 15:27:1918楼 得分:0
    被1楼抢话了

    回楼主:不用,能
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ethan119
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-30 08:17:5819楼 得分:0
    勿在浮沙筑高台,深入浅出MFC作者的开场白。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved