多线程通信

圣陶沙 2008-04-23 10:48:07
struct _SUB_THREAD
{
BOOL m_IsDownLoad;
BOOL m_bRequestData;
CString m_strBaseUrl;
};
static _SUB_THREAD* SubThread()
{
static _SUB_THREAD* SubThread = NULL;
if(!SubThread)
{
SubThread = new _SUB_THREAD();
}
return SubThread;
}
这是我的全局单体对象,想实现多线程访问,我是用SubThread()->调用_SUB_THREAD中元素的,现在的问题是,我的子线程和主线程通过SubThread()访问的就不是一块内存

有谁见过类似的情况?可能是什么原因?如何解决?
这是本人的QQ号可直接联系,谢谢!
QQ:423572171
...全文
283 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣陶沙 2008-05-09
  • 打赏
  • 举报
回复
有什么区别吗?
fantiyu 2008-05-08
  • 打赏
  • 举报
回复
struct _SUB_THREAD
{
BOOL m_IsDownLoad;
BOOL m_bRequestData;
CString m_strBaseUrl;
};

_SUB_THREAD* SubThread = NULL; //放在函数外面, 用global空间

static _SUB_THREAD* SubThread()
{
//static _SUB_THREAD* SubThread = NULL;
if(!SubThread)
{
SubThread = new _SUB_THREAD();
}
return SubThread;
}
zdleek 2008-05-08
  • 打赏
  • 举报
回复
楼主是如何创建线程的,线程控制函数是哪个?
估计这方面有问题
zdleek 2008-05-08
  • 打赏
  • 举报
回复
static _SUB_THREAD* SubThread = NULL;
为什么不在外部定义?
圣陶沙 2008-05-08
  • 打赏
  • 举报
回复
答7楼:我这样做是为了,以后能在进程间使用这个结构的方便。
另外,static _SUB_THREAD* SubThread()
  {
    static _SUB_THREAD* SubThread = NULL;
    if(!SubThread)
    {
      SubThread = new _SUB_THREAD();
    }
    return SubThread;
  }
它作为一个静态的公有函数也不会被多次执行吧?
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
等待牛人来答.
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
我也想知道,正在找這方面的資料~~~~~
aoxixiaojun 2008-04-28
  • 打赏
  • 举报
回复
struct _SUB_THREAD
{
BOOL m_IsDownLoad;
BOOL m_bRequestData;
CString m_strBaseUrl;
};
static _SUB_THREAD* SubThread()
{
/* static */ _SUB_THREAD* SubThread = NULL;
if(!SubThread)
{
SubThread = new _SUB_THREAD();
}
return SubThread;
}

反正你会new 一个 干吗还要把它设为static呢


struct _SUB_THREAD
{
  BOOL m_IsDownLoad;
  BOOL m_bRequestData;
  CString m_strBaseUrl;
  static _SUB_THREAD* SubThread()
  {
    static _SUB_THREAD* SubThread = NULL;
    if(!SubThread)
    {
      SubThread = new _SUB_THREAD();
    }
    return SubThread;
  }
};

至于这样用为什么是正确的可能是你把它作为成员函数的话,构造函数反正只调用一次,而且是全局的
那么地址在子线程和主线程调用的是同一个对象,内存的话也就不变拉


不晓得对不对 ??

langsir_zhu 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lenux 的回复:]
你好好看看c++的书就明白了。
[/Quote]

你直接解释就完了,非得这么挖苦别人而显得自己高明,有意思吗?这里是技术讨论区,别显摆,即使是最简单的问题,也请你耐心解释,而不要语含讥讽。
lenux 2008-04-25
  • 打赏
  • 举报
回复
你好好看看c++的书就明白了。
圣陶沙 2008-04-25
  • 打赏
  • 举报
回复
这样就更不对了,我已经解决了,但不知道为什么会这样。
struct _SUB_THREAD
{
  BOOL m_IsDownLoad;
  BOOL m_bRequestData;
  CString m_strBaseUrl;
  static _SUB_THREAD* SubThread()
  {
    static _SUB_THREAD* SubThread = NULL;
    if(!SubThread)
    {
      SubThread = new _SUB_THREAD();
    }
    return SubThread;
  }
};

#define m_subThread _SUB_THREAD::SubThread()
这样,用m_subThread就可以了。
lenux 2008-04-24
  • 打赏
  • 举报
回复
static _SUB_THREAD* SubThread()
{
static _SUB_THREAD* SubThread = new _SUB_THREAD();
if(!SubThread)
{
SubThread = NULL;
}
return SubThread;
}
圣陶沙 2008-04-23
  • 打赏
  • 举报
回复
我试了,不是这个问题。现在就是一个普通全局变量,我在主线访问可在子线程中就是不行。
lenux 2008-04-23
  • 打赏
  • 举报
回复
对其的访问加同步控制了没有?

不加的话你说的情况是有可能出现的

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧