CMap 取值的问题

playStudy 2010-08-20 04:19:16
定义了一个这样的
CMap<CString*, CString*, HANDLE*, HANDLE*> p_threadHandle;

赋值:
HANDLE hTemp[BLOCK];
CString strThreadOnlyFlag="1111";

for(int i=0;i<BLOCK;i++)
{
HANDLE hdtemp=::CreateThread(NULL,0,downthread,(LPVOID)pdownload,0,&dwthread);
hTemp[i]=hdtemp;
}

p_threadHandle.SetAt(&strThreadOnlyFlag,hTemp);
取值

HANDLE* m_hdResult;
p_threadHandle.Lookup(&strThreadOnlyFlag,m_hdResult);

这样取怎么也取不出来!
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
s11143 2010-08-20
  • 打赏
  • 举报
回复
这样不知道对不?
for(int i=0;i<BLOCK;i++)
{
HANDLE hdtemp=::CreateThread(NULL,0,downthread,(LPVOID)pdownload,0,&dwthread);
p_threadHandle.SetAt(&strThreadOnlyFlag,hTemp);
}

strThreadOnlyFlag 应该是不同的吧


playStudy 2010-08-20
  • 打赏
  • 举报
回复
CMap<CString, CString&, HANDLE*, HANDLE*> p_threadHandle;
这样写又不行怎么写啊?
playStudy 2010-08-20
  • 打赏
  • 举报
回复
找到原因了 &strThreadOnlyFlag
传的是地址,我后面算出来就的地址和原来的不同了
playStudy 2010-08-20
  • 打赏
  • 举报
回复
忘了说了,我取值是在另外一个线程取的,这个
CMap<CString*, CString*, HANDLE*, HANDLE*> p_threadHandle;
是个全局变量
并且赋值是在取值之前,先赋值,赋值完毕才开了一个线程做取值的
zjz800800 2010-08-20
  • 打赏
  • 举报
回复
哦,看错了,sorry
不过增加的方法类似的,手边没发给你测试写
playStudy 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xxd_qd 的回复:]
引用 1 楼 zjz800800 的回复:
map用法:

std::map<std::string,int> test;
test.insert(pair<std::string,int>("hello",1));

他用的是MFC的CMap,不是STL的map
[/Quote]

个结构:struct HANDLE4 { HANDLE m_h[4]; };,然后
typedef CMap<const char*, const char*, HANDLE4, HANDLE4&> CMapPnt;
这样也取不到值,但是看 CMap 类里面还是有元素的 count = 1
xxd_qd 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 stonewater 的回复:]
CString strThreadOnlyFlag="1111";
在离开所在的函数就释放了,你把&strThreadOnlyFlag保存起来有什么用呢
[/Quote]
至少他在取的时候还能使用这个变量名,说明那时候还没离开所在函数吧?何况那也可能是个全局变量呢。
就给出的代码而言,我实在看不出问题在哪。
playStudy 2010-08-20
  • 打赏
  • 举报
回复
&strThreadOnlyFlag
这里不错,我取值的时候是算的这个
stonewater 2010-08-20
  • 打赏
  • 举报
回复
CString strThreadOnlyFlag="1111";
在离开所在的函数就释放了,你把&strThreadOnlyFlag保存起来有什么用呢
xxd_qd 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zjz800800 的回复:]
map用法:

std::map<std::string,int> test;
test.insert(pair<std::string,int>("hello",1));
[/Quote]
他用的是MFC的CMap,不是STL的map
zjz800800 2010-08-20
  • 打赏
  • 举报
回复
map用法:

std::map<std::string,int> test;
test.insert(pair<std::string,int>("hello",1));

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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