??xml version="1.0" encoding="utf-8" standalone="yes"?> 武汉-Error<errorcpp@qq.com> 13:17:39 //We don't reference the new thread anymore, 是自己删除么Q?br />武汉-Error<errorcpp@qq.com> 13:25:37 也就是贝妞基本上都是要带一?U程理模块 我才注意到这个问?br /> 中山-疯子(510776002) 13:38:11 但是U程对象也可以提前被释放Q对于大部分的句柄来_如文件句柄hFileQ文件寻扑֏柄hFindFile{)Q用CloseHandle函数关闭句柄意味着整个对象被释放,但对于线E句柄来_关闭它仅释放U程的统计信息,q不会终止线E的执行Q所以如果不再需要用线E句柄的话,在调用CreateThread后马上就可以它关闭掉,U程的执行ƈ不会受媄响?br />
class CReadWriteLock
{
private:
int m_nReadCount;
pthread_mutex_t m_mutexRead;
pthread_mutex_t m_mutexWrite;
public:
CReadWriteLock():m_nReadCount(0)
{
pthread_mutex_init(&m_mutexRead, NULL);
pthread_mutex_init(&m_mutexWrite, NULL);
}
~CReadWriteLock()
{
pthread_mutex_destroy(&m_mutexRead);
pthread_mutex_destroy(&m_mutexWrite);
}
public:
void LockRead()
{
pthread_mutex_lock(&m_mutexRead);
m_nReadCount++;
if(m_nReadCount == 1)
{
pthread_mutex_lock(&m_mutexWrite);
}
pthread_mutex_unlock(&m_mutexRead);
printf("read lock\n");
}
void UnlockRead()
{
pthread_mutex_lock(&m_mutexRead);
m_nReadCount--;
if(m_nReadCount == 0)
{
pthread_mutex_unlock(&m_mutexWrite);
}
pthread_mutex_unlock(&m_mutexRead);
printf("read unlock\n");
}
void LockWrite()
{
pthread_mutex_lock(&m_mutexWrite);
printf("write lock\n");
}
void UnlockWrite()
{
pthread_mutex_unlock(&m_mutexWrite);
printf("write unlock\n");
}
};
posix有现成的dmutex
吉林-伙(694129464) 20:03:57
我昨天搜索了一下资?nbsp;的确?br />吉林-伙(694129464) 20:06:42
phtread_rwlock_init
pthread_rwlock_destroy
?nbsp;我说?nbsp;rwlock 怎么不死锁了?br />我以为我用错了呢
原来是死?nbsp;会返?nbsp;一?5错误?br />E序q会执行
更高U一?br />
伙神的实CQ逻辑主要几种在读锁,写锁?#8220;被动模式”。读锁根据读锁次数操作写锁状态。读锁保证,当读锁操?gt;0的时候写锁是锁住的,当读?=0的时候写锁是解开的?/div>
]]>
2.字体讄
tools -> options -> environment -> fonts and colors -> font
*************************
consolas字体 9号大看h很舒?br />
]]>
玛Q我现在要读写锁
哪ؓ接我一?br />{boost能用了还l你
vczh四号_丝(342775210) 18:46:25
不优化性能
优化啥啊,Ҏ没性能问题
(?br />
q摩托上班看着不错
VCZH._丝数组[0]<errorcpp@qq.com> 18:47:08
我去
N你们都不用读写所的,Q,
hzcv._丝数组[-1](450635425) 18:47:04
惌一?br />我以前有一个,但明显没q个?br />vczh四号_丝(342775210) 18:47:18
必须不用
d锁就是搓
hzcv._丝数组[-1](450635425) 18:47:31
普通锁不行吗?
vczh四号_丝(342775210) 18:47:36
是啊
普通的锁这么好
VCZH._丝数组[0]<errorcpp@qq.com> 18:47:50
玛Q让我做框架
那群队友都懒的不行啊
我让他用?nbsp;他不乐意
一定要我在底层全部搞完?br />vczh四号_丝(342775210) 18:48:22
直接用手枪蘪M?br />VCZH._丝数组[0]<errorcpp@qq.com> 18:49:39
是个加载自动更新的东西
原来是一个boolcd没有用锁保护
现在我来做,我想q是保护?br />vczh四号_丝(342775210) 18:49:46
用atomic
VCZH._丝数组[0]<errorcpp@qq.com> 18:49:53
玛问题来?br />问题?br />他们要要求加载的时?nbsp;d作能自动挂v
又要h
VCZH._丝数组[0]<errorcpp@qq.com> 18:52:07
我l去_堆里拔东西
?br />vczh四号_丝(342775210) 18:52:10
atomic不行?
hzcv._丝数组[-1](450635425) 18:52:42
d留两个函?br />VCZH._丝数组[0]<errorcpp@qq.com> 18:52:58
q样?br />
有个mutex 加蝲的时候lock上,bool ture
hzcv._丝数组[-1](450635425) 18:52:52
用mutex一夹,OK
VCZH._丝数组[0]<errorcpp@qq.com> 18:53:02
然后查询的时?br />不理会mutex
监视到ture?nbsp;unlock
vczh四号_丝(342775210) 18:54:41
你那个是windows
不能用mutex?br />windows得用spin lock ?br />(?br />vczh.lsbandar(14735407) 18:55:04
。。?nbsp;
关键D不?nbsp;
用什么spinlock
hzcv._丝数组[-1](450635425) 18:55:41
CriticalSection
hzcv._丝数组[-1](450635425) 19:00:28
Spinlock是什么?
hzcv._丝数组[-1](450635425) 19:02:19
#if defined(UNIX)
pthread_mutex_lock(&mutex_agent_list);
#elif defined(WINDOWS)
EnterCriticalSection(&cs_agent_list);
#endif
SpinLock和CriticalSection有什么不同啊Q?img alt="" src="file:///C:/DOCUME~1/cail/LOCALS~1/Temp/52W[C~~FFQ[27)18U93ZOWB.gif" sysface="111" />
vczh.Iskandar<vczh@163.com> 19:03:04
criticalsection是递归?br />
同一个线E可以enter两次
都没问题
leave两次
VCZH._丝数组[5](110086478) 19:03:28
sscanf 的性能比较差?
vczh.lsbandar(14735407) 19:03:40
q可?nbsp;
hzcv._丝数组[-1](450635425) 19:03:53
哦?递归的?
IC
VCZH._丝数组[0]<errorcpp@qq.com> 19:08:43
个h感觉
可递归?br />是一个大?br />vczh.Iskandar<vczh@163.com> 19:11:32
有什么好?br />
你要是当她不能递归
那就跟别的一样了
坑只会更?br />
ooseven(147340642) 19:12:57
同一个线E下什么场景会Dq箋甌锁两ơ?
VCZH._丝数组[5](110086478) 19:13:08
parse一个IP地址Q有没有比sscanf更快?br />ooseven(147340642) 19:13:19
同一U程下的E序不都是按序来的吗?
vczh.Iskandar<vczh@163.com> 19:13:29
可以递归的锁
h可组合?br />
写v代码省心多了
VCZH._丝数组[0]<errorcpp@qq.com> 19:14:13
很多?br />ooseven(147340642) 19:14:16
我的意思是_同一U程下的代码Q怎么会有q发甌锁的ZQ?br />vczh.Iskandar<vczh@163.com> 19:14:23
不会
但是你可以申请他两次
VCZH._丝数组[0]<errorcpp@qq.com> 19:14:50
h
Yaoxin(7936511) 19:14:43
比如插入一个|q个插入代码中又要算长度?nbsp;
ooseven(147340642) 19:14:44
有啥好处呢?
vczh.Iskandar<vczh@163.com> 19:14:46
人懒不能怪工?br />
ooseven(147340642) 19:15:15
甌锁两ơ有啥好处?
vczh.Iskandar<vczh@163.com> 19:15:22
q个?br />
譬如说我一个类的所有函?br />
都申请了那个?br />
l果有一?br />
q种设计q是很常见的?br />
我一个函数要调用另一个函C
省点代码
你用criticalsection
vczh.lsbandar(14735407) 19:15:49
可以递归
ooseven(147340642) 19:15:50
了解
vczh.Iskandar<vczh@163.com> 19:15:52
׃会自己锁死自׃
ooseven(147340642) 19:15:57
q样也行
Q?br />vczh.lsbandar(14735407) 19:16:06
避免你写出傻逼的死锁E序
q几乎是必须?nbsp;
ooseven(147340642) 19:16:23
啥啊Q这是大bug?br />vczh.Iskandar<vczh@163.com> 19:16:26
不是
vczh.lsbandar(14735407) 19:16:32
特别是你只用scope的时?nbsp;
vczh.Iskandar<vczh@163.com> 19:16:32
criticalsection
是Z让你q么用的
q有Qwindows有些东西是有own的概늚
ooseven(147340642) 19:16:54
如果q不bugQ允许这L设计的话Q那么锁两次也不够啊
vczh.Iskandar<vczh@163.com> 19:16:54
譬如mutex
你一个线E得C一个mutex
q个mutex挂在你的线E下面了
q个时候你可以不断地得到她
也是递归?br />
但是event没有owner
所以对于一个autoresetevent
vczh.lsbandar(14735407) 19:17:26
递归锁是重要Ҏ?nbsp;
vczh.Iskandar<vczh@163.com> 19:17:27
你连lwait两次
׃傻?br />
不然你觉得ؓ什么windows会搞么多?br />
其实他们是不一L
ooseven(147340642) 19:18:08
一般同一个类里的函数我都会设计一个参?nbsp;void process(..., bool isLock = true);
vczh.Iskandar<vczh@163.com> 19:18:14
何苦?br />
你就用criticalsection
无论如何enter一?br />
多省?br />
VCZH._丝数组[0]<errorcpp@qq.com> 19:18:53
ooseven(147340642) 19:18:08
一般同一个类里的函数我都会设计一个参?nbsp;void process(..., bool isLock = true);
q个思\不错h?br />ooseven(147340642) 19:18:42
那两ơ也不够用啊
VCZH._丝数组[0]<errorcpp@qq.com> 19:19:01
但是出错搞v来也更加苦g
vczh.Iskandar<vczh@163.com> 19:18:47
不是两次
vczh.lsbandar(14735407) 19:18:50
傻?nbsp;
vczh.Iskandar<vczh@163.com> 19:18:53
是不受限制的
你enter100?br />
也没问题
vczh.lsbandar(14735407) 19:18:58
你想什么呢?nbsp;
ooseven(147340642) 19:19:02
哦,了解?br />vczh.Iskandar<vczh@163.com> 19:19:03
谁他妈会有个2
只要你也leav 100ci好?br />
?
ooseven(147340642) 19:19:13
今天又有收获Q哈
vczh.Iskandar<vczh@163.com> 19:19:15
q你要l个上限
那也得是9Q?br />
ooseven(147340642) 19:19:57
windows下所有的锁都是同一U程下不锁吗Q?br />vczh.lsbandar(14735407) 19:19:58
一定要有递归?nbsp;
用v来才舒服
vczh.Iskandar<vczh@163.com> 19:20:34
不是
event׃?#8220;?#8221;
递归一下就所思自׃
semaphore也不是递归?br />
所以semaphore(max=1)q不{于mutex
而criticalsection和mutex的区别是
vczh.Iskandar<vczh@163.com> 19:21:39
cs带spin而且不能跨进E?br />
vczh.lsbandar(14735407) 19:21:52
凡是信号模型?nbsp;
都是不能重入?nbsp;
vczh.Iskandar<vczh@163.com> 19:22:12
而semaphore(max=1)勉强跟auto reset event一?br />
vczh.lsbandar(14735407) 19:22:19
比如vc的例?nbsp;
vczh.Iskandar<vczh@163.com> 19:22:21
但是auto reset只是普通event的一个属?br />
所以这些东襉K是不能互相替代的
vczh.lsbandar(14735407) 19:22:38
但是所有的资源锁都能重?nbsp;
ooseven(147340642) 19:22:51
我基本只用Cristalsection
vczh.lsbandar(14735407) 19:22:52
q有是
cs只能匿名
vczh.Iskandar<vczh@163.com> 19:23:02
用cs你就不需要islock参数了,直接q掉?br />
随便你锁
从未?#8207;̶q?#8234;(815330718) 19:23:12
加锁两次,p解锁两次
vczh.Iskandar<vczh@163.com> 19:23:41
解锁两次׃?br />
不就是把一个变量从1讄??br />
会有多慢
Q?br />
ooseven(147340642) 19:24:36
我只加锁,不管解锁Q解锁都交给析构函数?br />从未?#8207;̶q?#8234;(815330718) 19:24:41
我是说锁 重入.
vczh.Iskandar<vczh@163.com> 19:24:52
卧槽
加锁跟解?br />
当然是构造函C?br />
析构函数一个了
你居?br />
ooseven(147340642) 19:25:12
我是说不手动解锁
从未?#8207;̶q?#8234;(815330718) 19:25:44
那你手动加锁...加了两次,只能解锁一ơ了..
ooseven(147340642) 19:26:00
不会啊,构造两ơ,当然析构两?br />AutoLock Lock(Cristalsection);
以后׃了
vczh.Iskandar<vczh@163.com> 19:26:46
所以你那个islock参数
p么干掉吧
ooseven(147340642) 19:27:04
嗯,以前q不知道有这Ҏ?br />VCZH._丝数组[0]<errorcpp@qq.com> 19:29:46
condition ?nbsp;mutex
分别适应的场?br />
今天他又学了不少东西
膜拜
vczh.Iskandar<vczh@163.com> 19:29:53
condition variable是一个牛逼的东西
一定要掌握
VCZH._丝数组[0]<errorcpp@qq.com> 19:30:34
我们q边队友 wait_condition之前
vczh.Iskandar<vczh@163.com> 19:30:15
回家
VCZH._丝数组[0]<errorcpp@qq.com> 19:30:41
不锁mutex
从未?#8207;̶q?#8234;(815330718) 19:30:21
condition variable 不会
VCZH._丝数组[0]<errorcpp@qq.com> 19:30:48
求解?br />vczh.Iskandar<vczh@163.com> 19:30:28
不是?br />
VCZH._丝数组[0]<errorcpp@qq.com> 19:30:54
q是不要吐槽
vczh.Iskandar<vczh@163.com> 19:30:37
condition是和cs
一L的啊
VCZH._丝数组[0]<errorcpp@qq.com> 19:31:15不是和mutex一L?br />api参数都是q样
vczh.lsbandar(14735407) 19:31:10
和event一?nbsp;
vczh.Iskandar<vczh@163.com> 19:31:11
api名字我忘了但是大概就?br />
VCZH._丝数组[0]<errorcpp@qq.com> 19:31:33
condition_wait的时候要l一个mutexq去
vczh.Iskandar<vczh@163.com> 19:31:25
WaitForConditionVariableCS/SRW(condition, cs/srw)
没有mutex
回家
VCZH._丝数组[0]<errorcpp@qq.com> 19:32:14
?
condition是和cs一L很爽Q应为CS可以不需要在mutex保护?/div>
]]>
class IRoot 没有虚析?br />class Lv1 有虚析构
class Lv2
root是根Q下面都是承关p?br />q样有风险没Q?br />vczh.Iskandar<vczh@163.com> 16:25:41
q样你delete IRoot
?br />
׃会运行析构函?br />
C++一切没有父cȝc,只要是你打算被承,都要p析构函数
董一?65226002) 16:26:10
让他们全部private l承自IRoot
VCZH._丝数组[0]<errorcpp@qq.com> 16:28:04
有没啥好办法
我不惛_徐基cM
搞函C实现
好丑
vczh.Iskandar<vczh@163.com> 16:26:28
privatel承也没?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:28:29
那怎么?br />vczh.Iskandar<vczh@163.com> 16:26:37
说不定那个IRoot是那个c自q出去?br />
而且q你private?br />
dynamic_cast也是可以用的
董一?65226002) 16:26:55
那无所谓了?br />
vczh.Iskandar<vczh@163.com> 16:26:56
你只要在IRoot写一个空的虚析构函数p?br />
别的什么都不需要干
VCZH._丝数组[0]<errorcpp@qq.com> 16:29:01
但是q样如果跨模?br />董一?65226002) 16:27:24
如果你caseCzc,那自然就会调用正的析构函数?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:29:19
iroot相当于编译了两次
vczh.xyz_?54438159) 16:27:44
vczh.Iskandar<vczh@163.com> 16:27:46
不会?br />
董一?65226002) 16:27:52
准确的说Q析构函数要么是公有虚的Q或者protected非虚?br />
vczh.Iskandar<vczh@163.com> 16:27:53
你把实现写在了cpp文g里面
׃会被~译两次?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:30:06
那如果两个模?br />同时需要iroot
董一?65226002) 16:28:32
只要你不用基cLdeletezc,那析构函C需要是虚的
VCZH._丝数组[0]<errorcpp@qq.com> 16:30:26
p都加入cpp
C++的什么东襉K差一点,不完啊
VCZH._丝数组[5](110086478) 16:31:03
准确的说Q析构函数要么是公有虚的Q或者protected非虚?br />effective上看到过Q后一U一般什么时候用?nbsp;
vczh四号_丝(342775210) 16:31:14
加一个虚析构,又没?br />VCZH._丝数组[5](110086478) 16:31:49
其实可以让编译器做的
vczh.Iskandar<vczh@163.com> 16:32:06
加一个虚析构,又没?nbsp;
VCZH._丝数组[5](110086478) 16:32:25
只要有承,~译器就让析够,多省?nbsp;
董一?65226002) 16:32:42
后一U就是,你永q不能用基类指针来deletezc?br />
所以析构函C׃用是虚的?br />VCZH._丝数组[5](110086478) 16:33:11
比如Q场景?看得忘了
董一?65226002) 16:34:29
比如你有一大组不同的接口,class A : public I1, public I2, public I3{}
你有写函数是q样子的Qfun(I1* i) fun2(I2* i) fun3(I3* i)
VCZH._丝数组[0]<errorcpp@qq.com> 16:37:29
当智能指针遇到这个事?br />vczh.Iskandar<vczh@163.com> 16:35:33
我所有的c都l承自Object
董一?65226002) 16:35:36
你的fun只不q是调用几个接口Q而不会管理实际对象的生命周期Q那q样设计是合理?br />
vczh.Iskandar<vczh@163.com> 16:35:38
所有的接口都承自Interface
他们都有虚析构函?br />
我ؓ了解册个问?br />
然后没问题?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:38:12
嗯,惌样一个对?br />作ؓ多个接口
扩散C同模?br />偶就用shared_ptr?br />老残搞不定复杂的生命周期理
VCZH._丝数组[5](110086478) 16:37:00
java?nbsp;
vczh四号_丝(342775210) 16:37:12
真的是闲的蛋疼啊
加一个虚析构,又能怎么?br />VCZH._丝数组[0]<errorcpp@qq.com> 16:39:29好丑的,Q,
VCZH._丝数组[5](110086478) 16:37:36
其实我们游戏服务器也是用一个object?nbsp;
vczh四号_丝(342775210) 16:37:43
只要到l承,必虚析构
VCZH._丝数组[0]<errorcpp@qq.com> 16:40:25
比如你动态库
提供某个接口
董一?65226002) 16:38:38
哎,比如你的接口本本来就只是几个函数。连成员都没有,那干嘛还加个虚析构,d一个指针大呢
VCZH._丝数组[0]<errorcpp@qq.com> 16:40:49
然后又是昄加蝲
董一?65226002) 16:38:58
其是编译器对这U类q能够直接优化掉
VCZH._丝数组[0]<errorcpp@qq.com> 16:41:16
q样虽然那个虚析构是I的
但是实际?br />exe和dll里边
都有一份实?br />我理解的没错?br />我觉得这个现?br />不好
vczh.xyz_?54438159) 16:40:32
VCZH._丝数组[0]<errorcpp@qq.com> 16:43:02
囧,我再d好理解理解去
应该如果只用指针
是可以只有一份实现的
董一?65226002) 16:41:24
v大,你既然所有类l承自objectQ那你在做ui的时候,大可以模范qt了,在基c里加一个slot的概念,所有ui对象都可以接收发过来的消息?br />
跨dll千万要心了,你别在dll里new东西Q在另一个dll里deleteQ会出错?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:44:22
跨dll千万要心了,你别在dll里new东西Q在另一个dll里deleteQ会出错?br />
q个不一定出?br />和运行库相关
董一?65226002) 16:42:57
嗯,对的Q但q是一个当地晦涩的角落
一h明白Q最好的办法是避?br />ooseven(147340642) 16:43:08
我都是用heapallocQ没有这个顾?br />VCZH._丝数组[0]<errorcpp@qq.com> 16:45:15
氓
话说vs2012以后
q行库就是用heapalloc?br />所?br />q个问题Q不是问题了
ooseven(147340642) 16:43:51
是吗Q?br />你确定?
VCZH._丝数组[0]<errorcpp@qq.com> 16:45:58
如果我没记错
好像在哪看到q?br />VCZH._丝数组[5](110086478) 16:44:19
exe和dll会各有一份?
ooseven(147340642) 16:44:43
我重载了所有的容器Q传入一个自qAllocator<_Kty>
q个Allocator<_Kty>Q里面就是heapalloc
VCZH._丝数组[0]<errorcpp@qq.com> 16:47:24
昄加蝲dll
是_dll的代码和exe的代码是分开?br />假设exe和dll里边有相同的对象
那么他们必须都包含虚基类的完整实?br />也就是说虚基cdexe和dll里边
VCZH._丝数组[0]<errorcpp@qq.com> 16:48:29
分别都编译了一?br />那么exe和dll里边关于虚基cȝ机器?br />有相同的两?br />
vczh四号_丝(342775210) 16:47:28
动态链接啊,怎么会有两䆾代码
VCZH._丝数组[0]<errorcpp@qq.com> 16:49:41
exe一?nbsp;dll一?br />vczh四号_丝(342775210) 16:47:50
除非你dll是静态链接的
然后有蛋疼的静态链接exe了一?br />VCZH._丝数组[0]<errorcpp@qq.com> 16:49:56
不然肯定链接错误
我们遇到q一ơbug
和这个类?br />是单例模式
在exe和dll的地址
不一?br />后来发现是哪个instance
VCZH._丝数组[0]<errorcpp@qq.com> 16:51:06
在exe和dll各有一份实?br />VCZH._丝数组[5](110086478) 16:49:06
你那是export?nbsp;
不用两䆾代码
一份就?nbsp;
VCZH._丝数组[0]<errorcpp@qq.com> 16:51:28
只有一份编译都q不?br />VCZH._丝数组[5](110086478) 16:49:37
直接exportpQ单?nbsp;
可以
VCZH._丝数组[0]<errorcpp@qq.com> 16:51:56
那要把单利放到dll
然后隐式加蝲
不然q边exe链接错误
VCZH._丝数组[5](110086478) 16:50:20
是的
?nbsp;
好牛?nbsp;
vczh.Iskandar<vczh@163.com> 16:50:33
董一?013-01-30 16:41:24v大,你既然所有类l承自objectQ那你在做ui的时候,大可以模范qt了,在基c里加一个slot的概念,所有ui对象都可以接收发过来的消息?br />
上一ơ我也是q么做的Q这ơ戒?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:52:50
为啥
vczh.Iskandar<vczh@163.com> 16:50:50
singleton
VCZH._丝数组[0]<errorcpp@qq.com> 16:52:58
不是很爽?br />vczh.Iskandar<vczh@163.com> 16:51:02
Z是肯定的
VCZH._丝数组[0]<errorcpp@qq.com> 16:53:15
vczh.Iskandar<vczh@163.com> 16:51:21
你暴露个变量出来
VCZH._丝数组[0]<errorcpp@qq.com> 16:53:45
单例是恶?br />vczh.Iskandar<vczh@163.com> 16:51:41
都是要做成函数的
vczh四号_丝(342775210) 16:51:42
我发?public成员是bug器
vczh.Iskandar<vczh@163.com> 16:52:04
gacui很少有public的变?br />
vczh四号_丝(342775210) 16:52:31
我刚才秒了一下我们的代码,发C个内存泄?br />我都不敢看了
vczh.xyz_?54438159) 16:52:46
q个。。?br />VCZH._丝数组[5](110086478) 16:53:03
太厉害了
vczh.Iskandar<vczh@163.com> 16:53:07
发邮件喷
vczh四号_丝(342775210) 16:53:13
我才不喷
VCZH._丝数组[0]<errorcpp@qq.com> 16:55:21
vczh四号_丝(342775210) 16:52:31
我刚才秒了一下我们的代码,发C个内存泄?br />我都不敢看了
你们qx怎么查内存溢?nbsp;内存错误 内存泄漏什么的Q?br />vczh四号_丝(342775210) 16:53:32
我们qx靠h肉看
VCZH._丝数组[0]<errorcpp@qq.com> 16:55:38
vczh四号_丝(342775210) 16:53:13
我才不喷
喷了p解决Q,Q解军_要加班,Q,要死Q,Q?br />vczh四号_丝(342775210) 16:53:44
?br />vczh.Iskandar<vczh@163.com> 16:53:46
看source controlQ谁写的谁解?br />
vczh四号_丝(342775210) 16:53:55
不是我写?br />vczh.Iskandar<vczh@163.com> 16:54:05
赖都赖不?br />
vczh四号_丝(342775210) 16:54:06
p?br />VCZH._丝数组[0]<errorcpp@qq.com> 16:56:22
我估计这个问题该h牉|一模块,Q,
vczh.Iskandar<vczh@163.com> 16:54:26
visual studio打开以下咦annotate哪一行谁checkinq去的直接暴露出?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:56:33
不然你就爽快的改了喷人,Q,
SundayTooFar(5048977) 16:54:31上个目Q?nbsp;我秒了一下rpc协议?nbsp;l果发现几十个严重问题?nbsp;那才闹腾Q?nbsp;整个目l加班了两周。?br />vczh.Iskandar<vczh@163.com> 16:54:43
= =
webE序
你不招vczh
׃能用C++来写Q?br />
VCZH._丝数组[5](110086478) 16:55:00
vczh.Iskandar<vczh@163.com> 16:55:12
用C++来处理字W串
需要有坚定的信?br />
vczh.xyz_?54438159) 16:55:20
各位巨巨都是眼?br />vczh.Iskandar<vczh@163.com> 16:55:20
每一行代码都要充满智?br />
VCZH._丝数组[0]<errorcpp@qq.com> 16:57:26
搞死?br />vczh四号_丝(342775210) 16:55:31
要改的代?也不?br />只是我不愿意?br />VCZH._丝数组[0]<errorcpp@qq.com> 16:57:49
上午问了没h理我Qasn1有熟的没
vczh四号_丝(342775210) 16:55:43
改了,他又会改回来
vczh.Iskandar<vczh@163.com> 16:55:44
先改后喷
没有
]]>
我写的文件下载模?他们是用不?
q说我写的有问题,我忙没时间关心他?
他们弄了一个下午没弄好
l果拿到我手?一下就火了
保存的文件名里面的冒?br />深圳-Enic<errorcpp@qq.com> 23:38:51
Q,Q?br />囧,Q,
南昌-贝贝(1125591) 23:39:08
q种错我惌里应该没多少犯得出来?br />徏-双生(329015523) 23:39:26
一个给一巴掌Q,再问问会不会?br />深圳-Enic<errorcpp@qq.com> 23:39:15
q是多少q道行的错误
南昌-贝贝(1125591) 23:39:39
搞编E的不知道文件名不能含有冒号
q几个h在那? 不知道所以然
深圳-Enic<errorcpp@qq.com> 23:43:35
q个我好也没怎么留意q?br />不过应该可以ҎGetLastError
发现?br />南昌-贝贝(1125591) 23:44:08
有冒?nbsp;CreateFile WriteFile 都会正常
不过会写到天上去
所以他们调不出?q个估计没多h知道
深圳-Enic<errorcpp@qq.com> 23:44:49
恩这个要C来,不然以后说不准哪天忘C
徏-双生(329015523) 23:45:24不然哪天你也被骂了。。?/div>
]]>
了 不瞎扯了
吉林-伙 0:51:58
呵呵
吉林-伙 0:52:11
我慢慢学?br />深圳-Enic<errorcpp@qq.com> 0:52:09
q样异怺
深圳-Enic<errorcpp@qq.com> 0:52:17
偶来看看啥异?br />吉林-伙 0:52:29
内存不够?br />吉林-伙 0:52:27
你这是new太多?br />吉林-伙 0:53:02
异常?nbsp;outofmemory
吉林-伙 0:53:06
深圳-Enic<errorcpp@qq.com> 0:53:07
应该不是
深圳-Enic<errorcpp@qq.com> 0:54:21
被你说中?br />深圳-Enic<errorcpp@qq.com> 0:54:27
bad allocation
吉林-伙 0:54:39
呵呵
吉林-伙 0:54:53
q样看来
吉林-伙 0:54:57
只要内存够用
深圳-Enic<errorcpp@qq.com> 0:54:57最q发现异常比q回值好用多?br />深圳-Enic<errorcpp@qq.com> 0:55:10
mutex数量Q这个问题我以后不应该纠l了
吉林-伙 0:55:17
p甌好多
深圳-Enic<errorcpp@qq.com> 0:55:24
说到底就是一条汇~指?br />深圳-Enic<errorcpp@qq.com> 0:55:47
操作pȝ会缓冲下 id啥的
深圳-Enic<errorcpp@qq.com> 0:56:19
昨天一个多U程的代码,用了三方U程库,U程中不敢直接调用exitthread
吉林-伙 0:56:35
怕内存泄Ԍ
深圳-Enic<errorcpp@qq.com> 0:56:44
l果一个错误先直接退出线E,q箋改了几层函数
深圳-Enic<errorcpp@qq.com> 0:56:51
voidҎbool
深圳-Enic<errorcpp@qq.com> 0:57:09
后来 直接throw 一?br />深圳-Enic<errorcpp@qq.com> 0:57:19
U程d数catch一?br />深圳-Enic<errorcpp@qq.com> 0:57:28
nnd 多简z啊
吉林-伙 0:57:38
异常处理影响效率?br />深圳-Enic<errorcpp@qq.com> 0:57:51
比每个函数后面跟一个assert 一个if舒服多了
吉林-伙 0:58:04
呵呵
深圳-Enic<errorcpp@qq.com> 0:58:12
对了
吉林-伙 0:58:09
泡鱼告诉我
吉林-伙 0:58:21
你用异常处理 那是你代码写的有问题
吉林-伙 0:58:31
正常情况下不用try catch
深圳-Enic<errorcpp@qq.com> 0:58:36
异常处理不媄响正常流E的效率?br />吉林-伙 0:58:53
影响
深圳-Enic<errorcpp@qq.com> 0:58:55
那确实是有问题,发现一个不可恢复的错误
深圳-Enic<errorcpp@qq.com> 0:59:17
要么直接退?br />深圳-Enic<errorcpp@qq.com> 0:59:23
要么泡异?br />深圳-Enic<errorcpp@qq.com> 0:59:39
囧,Q,
boost的正?br />深圳-Enic<errorcpp@qq.com> 0:59:46
q么说来是狗屎?br />吉林-伙 0:59:50
more effective c++ 里好像说了异常处理的效率问题?br />深圳-Enic<errorcpp@qq.com> 0:59:56
到处异常Q基本不靠返回?br />深圳-Enic<errorcpp@qq.com> 1:00:02
我看看汇~代?br />吉林-伙 1:00:07
?br />吉林-伙 1:00:15
x异常处理的原?br />深圳-Enic<errorcpp@qq.com> 1:00:24
我觉得没?br />深圳-Enic<errorcpp@qq.com> 1:00:31
~译器完全可以处理吧
吉林-伙 1:01:12
你看看汇~代?br />吉林-伙 1:02:27
l测试,在CQ+里面加个try以后性能下降了百多?br />深圳-Enic<errorcpp@qq.com> 1:02:33
多了几个jmp
深圳-Enic<errorcpp@qq.com> 1:02:42
你测q了Q?br />吉林-伙 1:03:09
你用for 然后里边写个try catch
吉林-伙 1:04:13
我觉得一定会低效?br />吉林-伙 1:05:20
因ؓZ捕捉到异总?br />吉林-伙 1:05:24
仍然能堆栈^?br />深圳-Enic<errorcpp@qq.com> 1:05:28
try
{
00EC2390 mov byte ptr [ebp-4],1
int i = 0;
00EC2394 mov dword ptr [i],0
}
00EC239B jmp __catch$_wmain$0+14h (0EC23B1h)
catch(...)
{
int i = 0;
00EC239D mov dword ptr [i],0
}
00EC23A4 mov dword ptr [ebp-4],0
00EC23AB mov eax,offset __tryend$_wmain$1 (0EC23B8h)
00EC23B0 ret
00EC23B1 mov dword ptr [ebp-4],0
}
00EC23B8 jmp wmain+51h (0EC2381h)
00EC23BA jmp __catch$_wmain$4+38h (0EC24C3h)
吉林-伙 1:05:30
正常l束E序
吉林-伙 1:05:40
必要加入一些数据结?br />深圳-Enic<errorcpp@qq.com> 1:05:42
是一个长jmp
呵呵
深圳-Enic<errorcpp@qq.com> 1:21:01
E序中大量用异常的Q绝对不是ؓ了提高程序的E_性,或是可笑的提高可L,那都是忽悠外行的。用异常原因只有一个:hQ?br />
深圳-Enic<errorcpp@qq.com> 1:21:08
p赞同Q,Q?br />深圳-Enic<errorcpp@qq.com> 1:21:14
惛_些代?br />吉林-伙 1:21:19
呵呵
吉林-伙 1:21:29
泡鱼是个高手啊
吉林-伙 1:21:34
可惜?br />吉林-伙 1:21:41
q小子L丢一句就?br />吉林-伙 1:22:48
按道理来讲c++ happy path的时?nbsp;应该效率高的?br />吉林-伙 1:22:56
毕竟不用q回值判断了
深圳-Enic<errorcpp@qq.com> 1:23:10
看异常实C
深圳-Enic<errorcpp@qq.com> 1:23:25
q个是运行期间的事g
吉林-伙 1:23:30
?br />深圳-Enic<errorcpp@qq.com> 1:23:43
throw一下要Lcatch
深圳-Enic<errorcpp@qq.com> 1:23:47
估计旉在q里
吉林-伙 1:24:03
q个?nbsp;unhappy?br />深圳-Enic<errorcpp@qq.com> 1:24:05
我刚刚的例子是给~译器优化掉?br />深圳-Enic<errorcpp@qq.com> 1:24:13
直接call?br />吉林-伙 1:24:13
unhappy path
吉林-伙 1:24:15
?nbsp;?br />深圳-Enic<errorcpp@qq.com> 1:24:21
q样应该?开销
吉林-伙 1:24:27
用g++?br />深圳-Enic<errorcpp@qq.com> 1:24:47
vs用的手?br />吉林-伙 1:24:51
看看不优化是什么样?br />吉林-伙 1:25:11
vs关闭优化功能
深圳-Enic<errorcpp@qq.com> 1:25:13
应该是和ssh那一套差不多
吉林-伙 1:25:15
我心里还是不t实?br />深圳-Enic<errorcpp@qq.com> 1:25:33
@ILT+1225(__CxxThrowException@8) (2C14CEh)
深圳-Enic<errorcpp@qq.com> 1:25:38
又看了下
深圳-Enic<errorcpp@qq.com> 1:25:42
call的是q个
吉林-伙 1:26:02
传了两个参数
深圳-Enic<errorcpp@qq.com> 1:26:09
你拿od调看?br />吉林-伙 1:26:17
我没OD?br />吉林-伙 1:26:19
公司电脑
深圳-Enic<errorcpp@qq.com> 1:26:27
搞驱动的Q,Q?br />深圳-Enic<errorcpp@qq.com> 1:26:32
没ODQ?br />吉林-伙 1:26:43
没有?br />吉林-伙 1:26:53
我现在只会简单的windbg
吉林-伙 1:27:00
q是双机调试
吉林-伙 1:27:19
OD能调内核E序Q?br />深圳-Enic<errorcpp@qq.com> 1:27:43
那你用wdbg看看Q,Q?br />深圳-Enic<errorcpp@qq.com> 1:27:51
囧,Q,我这些太׃
吉林-伙 1:28:15
你弄?br />吉林-伙 1:28:24
我研I虚拟摄像头?br />吉林-伙 1:28:28
我今天晚上要弄成功共
深圳-Enic<errorcpp@qq.com> 1:29:37
恩,你成功
我跟了一大段汇编
吉林-伙 1:30:11
深圳-Enic<errorcpp@qq.com> 1:31:54
我决定以后还是不排斥异常
吉林-伙 1:32:36
看你对代码体U?nbsp;q有效率有没有什么特D要求了
吉林-伙 1:32:43
q东?nbsp;存在合?br />吉林-伙 1:32:51
必有其用武之地啊
深圳-Enic<errorcpp@qq.com> 1:33:03
实在是少些太多代码的Q,Q?br />吉林-伙 1:33:20
呵呵
深圳-Enic<errorcpp@qq.com> 1:33:23
你不知道Q今天我改第一个函?nbsp;最改??br />吉林-伙 1:33:30
不用q回?nbsp;不用断言和if
深圳-Enic<errorcpp@qq.com> 1:33:49
asio做的比较?br />深圳-Enic<errorcpp@qq.com> 1:34:10
一个功能提供一个异常版和一个返回值版
深圳-Enic<errorcpp@qq.com> 1:35:00
http://www.cnblogs.com/napoleon_liu/archive/2010/10/27/1862240.html
深圳-Enic<errorcpp@qq.com> 1:35:12
q个是分析异常实现机制的
深圳-Enic<errorcpp@qq.com> 1:35:18
你可以明目了
以前看过
吉林-伙 1:35:44
好像是和调用堆栈有关p?br />吉林-伙 1:35:50
q堆栈那些
深圳-Enic<errorcpp@qq.com> 1:36:08
q些开销不会过一倍的
深圳-Enic<errorcpp@qq.com> 1:36:44
q不是异常qQ你自己写返回g栯是一层一层^衡下M
吉林-伙 1:37:13
?nbsp;但是用异怸是需要新的数据结构吗
吉林-伙 1:37:17
q多了一些开销
吉林-伙 1:37:51
现在我的水^ q不是纠l是否应该用异常的时?br />吉林-伙 1:37:51
呵呵
吉林-伙 1:38:02
知道个大概就行啦 慢慢来吧
深圳-Enic<errorcpp@qq.com> 1:38:45
囧,Q,
都是被逼的Q,Q?br />深圳-Enic<errorcpp@qq.com> 1:39:07
l过今天的事情,我才知道为啥要抛异常
深圳-Enic<errorcpp@qq.com> 1:39:38
你看大型项目,好几癑ֱ的函数调用,Q,
吉林-伙 1:39:38
知道今天 你才知道抛出异常是callQ?br />深圳-Enic<errorcpp@qq.com> 1:39:42
?br />深圳-Enic<errorcpp@qq.com> 1:39:48
那直接死了算?br />吉林-伙 1:40:32
你知道抛出异常的那个参数是干啥的不?
深圳-Enic<errorcpp@qq.com> 1:40:35让你在第999层的函数调用Ҏ一个返回值退出程?br />深圳-Enic<errorcpp@qq.com> 1:40:40
不知?br />深圳-Enic<errorcpp@qq.com> 1:40:51
l果上面998层都是void
吉林-伙 1:40:57
呵呵
深圳-Enic<errorcpp@qq.com> 1:41:00
吉林-伙 1:41:04
你说的也有道?br />吉林-伙 1:41:15
q个是架构师设计的不合理了
吉林-伙 1:41:35
throw 那个参数 可以传给catch那里
深圳-Enic<errorcpp@qq.com> 1:41:49
压了两个参数
深圳-Enic<errorcpp@qq.com> 1:41:53
q有一个是?br />吉林-伙 1:42:02
你刚才写的是1?br />吉林-伙 1:42:17
你写两个
吉林-伙 1:42:21
看看是不是压了三?br />深圳-Enic<errorcpp@qq.com> 1:43:28你们家异常能一ơthrow俩参?br />吉林-伙 1:43:37
push offset __TI1H (2D8540h)
吉林-伙 1:43:57
?br />吉林-伙 1:44:11
从来没用q两个参?br />吉林-伙 1:44:14
不知道是否可?br />吉林-伙 1:44:25
压入了一个首地址
吉林-伙 1:44:32
TI1H的首地址
深圳-Enic<errorcpp@qq.com> 1:44:39
q有一个后来跟汇编的时候好像看了啥info
吉林-伙 1:44:48
q个TI1H是什么东东呢
深圳-Enic<errorcpp@qq.com> 1:45:08
我也不知道,估计是index之类?br />深圳-Enic<errorcpp@qq.com> 1:45:17
要去找catch?br />吉林-伙 1:45:23
?br />深圳-Enic<errorcpp@qq.com> 1:45:50
吉林-伙 1:45:55
谢谢
吉林-伙 1:46:04
今天对异常又有了新的理解?br />深圳-Enic<errorcpp@qq.com> 1:46:19谢谢
吉林-伙 1:46:24
qthrow了一个对?br />吉林-伙 1:46:38
catch 那边q的对象了
深圳-Enic<errorcpp@qq.com> 1:46:48
我今天最大的收获是在云风的博客,看到了异常的本质
深圳-Enic<errorcpp@qq.com> 1:46:51
hQ,Q?br />深圳-Enic<errorcpp@qq.com> 1:47:04
和面向对象一PQ,
深圳-Enic<errorcpp@qq.com> 1:47:11
整个泥马是惛_懒了
深圳-Enic<errorcpp@qq.com> 1:47:14
囧,Q,
吉林-伙 1:47:55
抛出异常q边用引用也白费?br />吉林-伙 1:48:07
catch用引用也没用
吉林-伙 1:48:12
q是copy了一?br />深圳-Enic<errorcpp@qq.com> 1:48:31
q是看编译器操作?br />吉林-伙 1:48:39
不用?br />吉林-伙 1:48:43
必须copy
throw 那个地方是时对?br />深圳-Enic<errorcpp@qq.com> 1:49:16
那个E序实施看就知道?br />深圳-Enic<errorcpp@qq.com> 1:49:27
不一定是临时?br />吉林-伙 1:49:32
一定的
吉林-伙 1:49:34
呵呵
吉林-伙 1:49:33
你试?br />吉林-伙 1:49:41
q个地方我记得最清楚
深圳-Enic<errorcpp@qq.com> 1:49:53
囧,我要是一?nbsp;关闭拯构造的class
深圳-Enic<errorcpp@qq.com> 1:49:57
你咋_Q,
深圳-Enic<errorcpp@qq.com> 1:50:04
不让抛了Q,Q?br />吉林-伙 1:50:34
你试?br />吉林-伙 1:50:37
q个问题我真没想q?br />吉林-伙 1:51:01
不过你怎么关闭拯构造呢Q?br />吉林-伙 1:51:39
默认构造你可以关闭
深圳-Enic<errorcpp@qq.com> 1:51:56
囧,Q,
深圳-Enic<errorcpp@qq.com> 1:52:01
如果你说的成?br />深圳-Enic<errorcpp@qq.com> 1:52:13
是说这栯反了Cpp的语法规?br />吉林-伙 1:52:29
你打C地址
吉林-伙 1:52:34
看看 q个不是我说?br />深圳-Enic<errorcpp@qq.com> 1:52:36
?nbsp;引用接收C?nbsp;copy的对?br />吉林-伙 1:52:40
是我从书上看?br />吉林-伙 1:52:52
当然 不排除我记错的可?br />
吉林-伙 1:52:58
但是 我觉得我没记?br />吉林-伙 1:52:59
呵呵
吉林-伙 1:53:19
你试?nbsp;我去写摄像头
吉林-伙 1:53:27
{你l果
深圳-Enic<errorcpp@qq.com> 1:56:13
囧,Q,
是时对?br />吉林-伙 1:56:24
深圳-Enic<errorcpp@qq.com> 1:56:25
所以,q里不是 call
吉林-伙 1:56:36
引用失效了吧
深圳-Enic<errorcpp@qq.com> 1:56:39
应该有个q行时环境做了手?br />南-relilun(232359027) 1:57:23
吉林-伙 1:58:07
好了 既然已经定是时对象了 你告诉我下怎么关闭拯构?br />深圳-Enic<errorcpp@qq.com> 1:59:29
囧,Q,
深圳-Enic<errorcpp@qq.com> 1:59:35
private
深圳-Enic<errorcpp@qq.com> 1:59:45
class CTest : boost::noncopyable
吉林-伙 1:59:49
深圳-Enic<errorcpp@qq.com> 1:59:52
q有一个是宏的Q,Q?br />吉林-伙 1:59:56
我二?br />吉林-伙 2:00:00
你试?br />吉林-伙 2:00:04
试试
吉林-伙 2:00:03
你关闭下十四?br />吉林-伙 2:00:13
看看让抛Z?br />深圳-Enic<errorcpp@qq.com> 2:01:32
~译错误
吉林-伙 2:01:53
?br />吉林-伙 2:01:56
太感谢了
深圳-Enic<errorcpp@qq.com> 2:01:56
刚刚是徏立在假象throw和catch是直接call的关p?br />吉林-伙 2:02:03
又学C不少
深圳-Enic<errorcpp@qq.com> 2:02:38
应该是有个第三方 接收throw的对象,然后清理现场Q然后拷贝异常,再送到 catch
吉林-伙 2:03:06
如果你throw的不是对象呢
吉林-伙 2:03:22
仅仅是一个char*
深圳-Enic<errorcpp@qq.com> 2:03:25我想q不是问?br />吉林-伙 2:04:09
应该是采用同L基址
深圳-Enic<errorcpp@qq.com> 2:04:09
今天的专题是Q小伙和他的异常
吉林-伙 2:04:11
机制
吉林-伙 2:04:26
吉林-伙 2:04:30
你可别发?br />吉林-伙 2:04:32
丢h
深圳-Enic<errorcpp@qq.com> 2:05:21
《一个异常引发的血案?br />深圳-Enic<errorcpp@qq.com> 2:06:08
应该是mutex的数量到深入探讨C++异常
忘了说了
catch不用reference
会多一ơ拷?nbsp;
哦?
?br />那更有意思了
哈哈
了解?nbsp;
q时候就copy了一?br />然后W三方传l?nbsp;catch
深圳-Enic<errorcpp@qq.com> 2:12:37
三次析构
两次构?br />有一ơ应该是 0x语法中的move
吉林-伙 (694129464) 2:13:07
没用引用Q?br />q是用了引用Q?br />深圳-Enic<errorcpp@qq.com> 2:13:15
throw的时?br />值catch
吉林-伙 (694129464) 2:13:49
不应该三ơ析?nbsp;两次构造的?br />深圳-Enic<errorcpp@qq.com> 2:14:17
C++果然是不是一般h玩的
我这是算?nbsp;try里边的栈
深圳-Enic<errorcpp@qq.com> 2:15:50话说java c#更可?br />你压根就不想知道~译器干了啥Q,Q?nbsp;
深圳-Enic<errorcpp@qq.com> 2:15:50话说java c#更可?br />你压根就不想知道~译器干了啥Q,Q?nbsp;
]]>
谁能l我讲一下vc++多线E,几分钟就搞定
- -?583214826) 12:08:06
谁能l我讲一下vc++多线E,几分钟就搞定, 多谢大神们,真的很?br />misora<chriscross@qq.com> 12:08:41
q个太广泛了。?br />- -?583214826) 12:09:03
创徏一个线E,可以随时启用Q就ok?br />- -?583214826) 12:10:06
亲们Q帮帮我?br />misora<chriscross@qq.com> 12:10:24
_beginthreadex
- -?583214826) 12:10:41
有没有比较完整一些的代码
misora<chriscross@qq.com> 12:10:46
没有
- -?583214826) 12:10:59
_begininthreadex是个ҎQ?br />misora<chriscross@qq.com> 12:11:10
是开始一个线E?br />- -?583214826) 12:11:46
?br />杯水车薪(1729751029) 12:18:11
无线上网?nbsp;?nbsp;无线|卡?U不同的东东. 现在都ؕ套了
- -?583214826) 12:18:36
...
上v-千层(670825328) 12:19:17 ?????????????????q有q样提需求的?
如果有h?谁给我一套房,200元搞?q个可笑?br />杯水车薪(1729751029) 12:19:31
上v-千层(670825328) 12:20:45
需求定?旉成本已被决定了.
泥翘(694820778) 12:22:49
什么东襉K{着别hl你来讲
杯水车薪(1729751029) 12:23:16
泥翘(694820778) 12:23:45
- -?583214826) 12:28:02
- -?583214826) 12:28:13
旉跟钱不一样好?br />杯水车薪(1729751029) 12:30:35
不是?昨天老师q说旉是金钱
- -?583214826) 12:30:49
好吧随便?br />杯水车薪(1729751029) 12:31:04
要么可能今天不是?br />杯水车薪(1729751029) 12:32:23
不过,我学多线E学了一周才会用?好久以后才明白怎么才能不让E序崩溃
- -?583214826) 12:33:47
很多语言的线E我都学q,唯独vc++不会Q其?行代码就可以解决q行一个线E,关键我不会写啊,求高人指炏V?br />武汉-Error<errorcpp@qq.com> 12:34:40
- -?583214826) 12:33:47
很多语言的线E我都学q,唯独vc++不会Q其?行代码就可以解决q行一个线E,关键我不会写啊,求高人指炏V?br />
凭你这句话
武汉-Error<errorcpp@qq.com> 12:34:44
没必要在q里?br />- -?583214826) 12:34:57
...
- -?583214826) 12:35:06
我就是问一下,q引起公愤了
- -?583214826) 12:35:07
- -
- -?583214826) 12:35:12
求高人指?br />武汉-Error<errorcpp@qq.com> 12:35:15
5分钟够你在msdn扑ֈapi?br />- -?583214826) 12:35:49
有高手给写个单易懂的岂不是更?br />杯水车薪(1729751029) 12:36:53
貌似msdn也是高手所写,msdn中也有简单易懂的例子
- -?583214826) 12:37:09
那你们去扑?br />- -?583214826) 12:37:13
求高人指?br />杯水车薪(1729751029) 12:37:24
不过Q用VC的多U程和其它语a的是很大不同地?br />
嗯,明白
武汉-Error<errorcpp@qq.com> 12:37:37
哥给你找个,估计你不会用
唉,Q,
- -?583214826) 12:37:48
那你l我找个吧,ȝ你了
杯水车薪(1729751029) 12:37:49
其它语言地学会了Q到了VCq里Q仍然等于初学?br />上v-千层(670825328) 12:39:07
Ҏ我的分析Q这里分2cMhQ一cȝ不会的,在此忽悠人?br />另一cȝ学会了,当初学得很费力,所以今天看到另一?br />不会的,只感到高?br />武汉-Error<errorcpp@qq.com> 12:39:28
不是Q他问问题的态度 我很难接?br />- -?583214826) 12:39:34
q有一c,是吃饱了没事干在这评论问题?br />上v-千层(670825328) 12:39:38
唉。一切的|都在多U程太难。不能怪Q何h
武汉-Error<errorcpp@qq.com> 12:39:52
用boost::thead
- -?583214826) 12:40:03
我的态度没那么不好吧Q?nbsp;- -
上v-千层(670825328) 12:40:39 向他推荐用boost的,看来属于W?cM?br />武汉-Error<errorcpp@qq.com> 12:41:12
装逼的
上v-千层(670825328) 12:41:14
唉。只能说Q咱虽,品种却多?br />- -?583214826) 12:41:29
你是不是大姨妈来了?
- -?583214826) 12:41:50
你要真觉着没事q可以去看看书什么的
- -?583214826) 12:41:57
知识是无边的。你怎么也学不完
上v-千层(670825328) 12:42:08
你是不是没钱L摩啊
武汉-Error<errorcpp@qq.com> 12:42:12
问问题的q是评论,Q,
上v-千层(670825328) 12:42:17
q么兴奋
- -?583214826) 12:42:28
我不兴奋Q看你吃太多了,我关心一?br />上v-千层(670825328) 12:43:12
只是׃一下Ş了。你q有啥不开心的Q也说说让咱开心一?br />武汉-Error<errorcpp@qq.com> 12:43:33
q小伙应该不是Cpȝ序员
杯水车薪(1729751029) 12:43:33
- -?583214826) 12:43:40
我跟你那谁有一腿了。不好意?br />- -?583214826) 12:43:46
我不是学c++?br />杯水车薪(1729751029) 12:44:17
不是?br />杯水车薪(1729751029) 12:44:31
来错了。怪不得成了娱乐?br />- -?583214826) 12:45:10
哦,你们很不喜欢不会c++的h?br />- -?583214826) 12:45:16
好吧
杯水车薪(1729751029) 12:45:20
喜欢
杯水车薪(1729751029) 12:45:48
C++的h很少׃的?br />武汉-Error<errorcpp@qq.com> 12:46:13
相对q是很open?br />上v-千层(670825328) 12:46:14
上v-千层(670825328) 12:47:04
看把他急的Q这一腉K一腉K说出来了。快崩溃了?br />看来他本w就不是多线E的?br />武汉-Error<errorcpp@qq.com> 12:47:19
#include <iostream>
using namespace std;
#include <boost/thread.hpp>
void TestFunc()
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
boost::thread threadTest(&TestFunc);
threadTest.join();
getchar();
return 0;
}
武汉-Error<errorcpp@qq.com> 12:47:25
没编?br />杯水车薪(1729751029) 12:47:23
武汉-Error<errorcpp@qq.com> 12:47:31
不过应该没问题的
- -?583214826) 12:47:36
谢谢高手Q比某h强很?br />武汉-Error<errorcpp@qq.com> 12:47:43
我是水货
武汉-Error<errorcpp@qq.com> 12:47:51
高手不会回答q么单的问题?br />武汉-Error<errorcpp@qq.com> 12:47:55
其你这U态度
武汉-Error<errorcpp@qq.com> 12:48:04
我敢?nbsp;在C++?nbsp;l对混不开
武汉-Error<errorcpp@qq.com> 12:48:18
除非你在其他斚w很牛
- -?583214826) 12:48:52
我态度也没怎么不好啊,我只是解释一下我能很快接受高手给讲得东西|了
- -?583214826) 12:49:09
要不然你看看聊天记录- -
杯水车薪(1729751029) 12:49:09
武汉-ErrorQ这L题,什么也不会解决。他仍然不会Q相信boost是需要安装的Q所以他也用不成
- -?583214826) 12:49:28
我试试吧Q不行再解决
游戏开发?2528395832) 12:49:34
推荐你找好工?nbsp;只要你上CG游戏人才|:http://www.cggamejob.com注册个h会员Q?nbsp;p帮你实现׃ 最新职位招聘:Q?D角色 场景 Ҏ 动作 p动画 术 E序、策划、数?nbsp;市场 q营{?
武汉-Error<errorcpp@qq.com> 12:49:42
- -?583214826) 12:48:52
我态度也没怎么不好啊,我只是解释一下我能很快接受高手给讲得东西|了
C++er 从来不信速成
杯水车薪(1729751029) 12:49:41
他还得再提问
武汉-Error<errorcpp@qq.com> 12:50:11
合格的C++er 都是被编译器摧残y躏出来?br />- -?583214826) 12:50:14
q我信了速成也不能说我态度不好?nbsp;- -Q我很诚恌。?br />武汉-Error<errorcpp@qq.com> 12:50:23
诚恳个屁
杯水车薪(1729751029) 12:50:24
你开了头Q要是不帮他完全解决Q反可能成ؓ不耐心的h?br />- -?583214826) 12:50:36
...
- -?583214826) 12:50:37
好吧
武汉-Error<errorcpp@qq.com> 12:50:49
囧,Q,
- -?583214826) 12:50:57
弟认错?br />武汉-Error<errorcpp@qq.com> 12:51:10
error PRJ0003 : Error spawning 'cmd.exe'.
谁遇到过
- -?583214826) 12:52:02
问个问题真困?br />- -?583214826) 12:52:03
?br />杯水车薪(1729751029) 12:52:37
可能原因恰在于你问了一个过于简单的问题
武汉-Error<errorcpp@qq.com> 12:52:52
太抽象了
- -?583214826) 12:53:08
果然出问题了
- -?583214826) 12:53:21
- -?583214826) 12:53:31
q是要添加外部文件吧Q?br />杯水车薪(1729751029) 12:53:45
好,武汉人,可以l箋了?br />- -?583214826) 12:53:54
....
武汉-Error<errorcpp@qq.com> 12:54:24
- -?583214826) 12:54:36
不对
- -?583214826) 12:54:47
是这?br />上v-千层(670825328) 12:54:51
用了boost你就掉进了无底洞?br />现在怿关于W?cMh的理Z吧?br />- -?583214826) 12:55:09
我的E序要在标准win32q_下运行,不能带其他的cd
武汉-Error<errorcpp@qq.com> 12:55:12
声明下,Q,偶今天是装逼来的,Q,
武汉-Error<errorcpp@qq.com> 12:55:30
主要是不用boost 太麻烦了Q要写好多代?br />- -?583214826) 12:55:33
....
杯水车薪(1729751029) 12:55:26
- -?583214826) 12:55:42
createThreadq个p了吧
武汉-Error<errorcpp@qq.com> 12:55:59
- -?583214826) 12:55:42
createThreadq个p了吧
单的l你代码 是害你,Q,
- -?583214826) 12:56:05
明白
武汉-Error<errorcpp@qq.com> 12:56:06
很多东西要注意的
武汉-Error<errorcpp@qq.com> 12:56:25
__beginthread
武汉-Error<errorcpp@qq.com> 12:56:27
用这?br />武汉-Error<errorcpp@qq.com> 12:56:31
理由不解?br />- -?583214826) 12:56:37
我查?br />杯水车薪(1729751029) 12:57:08
用哪个函C能不知道Q一共就2个函数。msdn中推荐一个?br />武汉-Error<errorcpp@qq.com> 12:57:20
上v-千层(670825328) 12:54:51
用了boost你就掉进了无底洞?br />现在怿关于W?cMh的理Z吧?br />
千同学展开来说?br />武汉-Error<errorcpp@qq.com> 12:57:27
q有一会才上班?br />上v-千层(670825328) 12:57:37
真正的困难还没看出来Q困隑֜于要几分钟之内?br />杯水车薪(1729751029) 12:57:49
- -?583214826) 12:58:01
呵呵Q可惜没带着我搞一?br />- -?583214826) 12:58:07
自己搞当然要花时间了
武汉-Error<errorcpp@qq.com> 12:58:08
我不用boost 也要L函数Q然后填api
上v-千层(670825328) 12:58:08
U程能有多少函数啊?
- -?583214826) 12:58:09
?br />杯水车薪(1729751029) 12:58:48
xQ武汉h是唯一回答q的人,Ll吧
上v-千层(670825328) 12:59:39
别h花时间搞成功的,适用于所有情늚Q恐怕只有boost了?br />上v-千层(670825328) 13:00:01
好东东怕你吞不下去?
武汉-Error<errorcpp@qq.com> 13:00:04
我不是武汉h
武汉-Error<errorcpp@qq.com> 13:00:22
好吧
武汉-Error<errorcpp@qq.com> 13:00:25
W二?nbsp;l你
武汉-Error<errorcpp@qq.com> 13:00:27
#include <iostream>
using namespace std;
#include <boost/thread.hpp>
#include <Windows.h>
#include <process.h>
void TestFunc()
{
cout << __FUNCTION__ << endl;
}
void TestFuncWin( void *ch )
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
boost::thread threadTest(&TestFunc);
threadTest.join();
_beginthread( &TestFuncWin, 0, NULL );
getchar();
return 0;
}
武汉-Error<errorcpp@qq.com> 13:00:45
不过你要是这么用了,技术经理会怀疑你的能?br />- -?583214826) 13:01:44
上v-千层(670825328) 13:02:09
你都改用api了,那这个例子就别用boost了。他电脑里没q个?br />武汉-Error<errorcpp@qq.com> 13:02:19
q是我编译通过的代码,Q,
你怎么跟研I生一样麻?br />- -?583214826) 13:02:27
.....
武汉-Error<errorcpp@qq.com> 13:02:45
?nbsp;boost的东?nbsp;q掉
武汉-Error<errorcpp@qq.com> 13:02:50
剩下的就是你要的
- -?583214826) 13:02:58
行了
- -?583214826) 13:03:00
我没用boost
- -?583214826) 13:03:09
thanks
上v-千层(670825328) 13:03:20
在函数前加修饰字 “WINAPI”
武汉-Error<errorcpp@qq.com> 13:03:32 装逼成?br />- -?583214826) 13:03:35
.....
武汉-Error<errorcpp@qq.com> 13:03:46
其实学C++的h都很热情
武汉-Error<errorcpp@qq.com> 13:03:59
只是恨牛不成逼啊
- -?583214826) 13:04:01
ȝE的函数q是开启线E要执行的函?br />上v-千层(670825328) 13:04:01
个个都像是刚来大姨妈一?br />武汉-Error<errorcpp@qq.com> 13:04:32
#include <iostream>
using namespace std;
#include <Windows.h>
#include <process.h>
void TestFuncWin( void *ch )
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
_beginthread( &TestFuncWin, 0, NULL );
getchar();
return 0;
}
武汉-Error<errorcpp@qq.com> 13:04:36
q样׃会错?br />武汉-Error<errorcpp@qq.com> 13:04:38
o(|Ӟ`|?o 唉,Q,
- -?583214826) 13:05:42
好了Q成功了
武汉-Error<errorcpp@qq.com> 13:05:58
午休旉都快q了Q,Q?br />- -?583214826) 13:06:02
- -?583214826) 13:06:38
好吧Q被骂的很爽Q不q问题解决了
- -?583214826) 13:06:42
谢谢怽大神?br />上v-千层(670825328) 13:06:59
呵呵Q不是成功了
而是p|刚开?br />- -?583214826) 13:07:18
p|了就debug
- -?583214826) 13:07:26
为debug奋斗一辈子- -
武汉-Error<errorcpp@qq.com> 13:07:30
上v-千层(670825328) 13:06:59
呵呵Q不是成功了
而是p|刚开?br />
正解
武汉-Error<errorcpp@qq.com> 13:07:48
多线E的q真?nbsp;debug一辈子
杯水车薪(1729751029) 13:07:50
不是太可能吧。多U程可以认ؓ是一条不归\。用了就是找歅R?br />杯水车薪(1729751029) 13:08:00
debug没用
- -?583214826) 13:08:03
那个
- -?583214826) 13:08:14
q线E不会要手动销毁吧- -Q?br />武汉-Error<errorcpp@qq.com> 13:08:17
也别太绝对嘛
武汉-Error<errorcpp@qq.com> 13:08:28
自然return可?br />武汉-Error<errorcpp@qq.com> 13:08:38
不要问其他的?br />武汉-Error<errorcpp@qq.com> 13:08:46
一个月都讲不完
- -?583214826) 13:08:50
...
- -?583214826) 13:09:04
- -?583214826) 13:09:09
q回的线E句柄嘛
上v-千层(670825328) 13:09:07 q不寏V?br />windows下线E会占用一个handleQ必close
- -?583214826) 13:09:14
不销毁怎么办?
上v-千层(670825328) 13:10:06
handle是系l别的资源。不close会旉长占完了以后pȝL
- -?583214826) 13:10:10
销毁线E的函数叫什么来着
武汉-Error<errorcpp@qq.com> 13:10:16
q个我真没注?br />上v-千层(670825328) 13:10:55
一般不要销毁线E。否则线E不会执行栈展开行ؓQ将会内存泄?br />- -?583214826) 13:11:31
U程用完才销?br />上v-千层(670825328) 13:11:47
不是Q不要销毁。要让线E自q?br />- -?583214826) 13:11:56
应该有个什么函敎ͼ用来接收传回来的参数
杯水车薪(1729751029) 13:12:12
Ƣ迎你来到多U程的失败之路?br />- -?583214826) 13:12:42
那线E指定的回调Ҏ执行完了不就自己q束了?br />- -?583214826) 13:12:53
好吧Q那׃用擦屁股?br />上v-千层(670825328) 13:13:10
应该Q这个想法没错。可U程传回来之前你创徏的线E可能就已经l束了,你要考虑和设?br />上v-千层(670825328) 13:13:36
q个handle也要close
- -?583214826) 13:13:54
我没扑ֈ什?nbsp;distoryThread之类的函?br />杯水车薪(1729751029) 13:13:58
了Q先用着吧。等L了再debug
- -?583214826) 13:14:21
TerminateThread(thread1, 0);
CloseHandle(thread1);
- -?583214826) 13:14:25
是不是这两个
武汉-Error<errorcpp@qq.com> 13:14:34
千城
上v-千层(670825328) 13:14:43
多线E你想debug????????把大姨妈调出来了也调不出问题在哪
武汉-Error<errorcpp@qq.com> 13:14:48
你说的是 CreateThread 之后必须?nbsp;closeHandle?br />武汉-Error<errorcpp@qq.com> 13:14:57
我记得用_beginthread是不需要的啊?
武汉-Error<errorcpp@qq.com> 13:15:00
N我记错了Q?br />- -?583214826) 13:15:14
_beginthreadq回了一个ptr
- -?583214826) 13:15:23
我想应该是用作关闭的
武汉-Error<errorcpp@qq.com> 13:15:49
永远不要在线E外部强制关闭线E?br />- -?583214826) 13:15:57
嗯,?br />上v-千层(670825328) 13:16:37我就是用q个函数Q以前试q不closeQ连l运?0几个时Q最后handle没有了,出错了。一开始都是好的?br />武汉-Error<errorcpp@qq.com> 13:17:20
?nbsp;受教?nbsp;
杯水车薪(1729751029) 13:19:04
武汉-Error<errorcpp@qq.com> 13:19:08
如果用pthread 之类
武汉-Error<errorcpp@qq.com> 13:19:15
是不需要这么麻烦的?br />杯水车薪(1729751029) 13:19:24
好。事情完了?br />不过q个人的让我们不爽Q提议T?br />- -?583214826) 13:20:21
首先要澄清一个问题,那就是CreateThread是Windows的API函数Q而_beginthread和_beginthreadex则是CRT库函敎ͼ查看q两个CRT函数的代码可以得知其实它们内部是调用的CreateThreadQ这很显然嘛QCRT库也是要q行在Windows上)?br />
q两个CRT函数与CreateThread有什么区别呢Q区别在于这两个CRT函数针对其它CRT库函敎ͼ特别是那些涉及内存分配的CRT函数做了Ҏ的处理。直接在CreateThread API创徏的线E中使用sprintfQmallocQstrcat{涉及CRT存储堆操作的CRT库函数是很危险的Q容易造成U程的意外中止?nbsp;在用_beginthread和_beginthreadex创徏的线E中可以安全的用CRT函数Q但是必dU程l束的时候相应的调用_endthread或_endthreadex。虽焉是内部调用CreateThread API创徏U程Q但是这两个函数q是有很大的区别。首先,_beginthreadex函数比_beginthread函数多了三个参数Q它看h更像CreateThread而不是同胞兄弟_beginthreadQ其ơ,_beginthread要求U程函数是__cdecl调用U定Qƈ且没有返回|而_beginthreadex则要求线E函数是__stdcall调用U定q且q回U程的退出码Q第三,与_beginthread成对调用的_endthread函数内部隐式的调用CloseHandle关闭了线E句柄,而与_beginthreadex成对使用的_endthreadex则没有关闭线E的句柄Q需要显C的调用CloseHandle关闭U程句柄Q最后,q两个函数在执行成功时返回线E的句柄Q可以通过q个句柄调用其它U程相关的APIQ比如SetThreadPriorityQResumeThread{等。但是执行失败时q回值是不同的,_beginthreadq回 -1 表示p|Q而_beginthreadexq回 0 表示p|?
今天讨论一个问?br />武汉-Error<errorcpp@qq.com> 13:17:44
关于U程?br />武汉-Error<errorcpp@qq.com> 13:17:59
//Create a new thread.
HANDLE hThread = CreateThread(NULL, 0, SecondThread,
(PVOID)&x, 0, &dwThreadId);
//so close our handle to it.
closeHandle(hThread);
武汉-Error<errorcpp@qq.com> 13:18:08
q是Windows核心~程的一D代?br />武汉-Error<errorcpp@qq.com> 13:18:23
为啥 CreateThread后面要跟一个closehandle
南昌-贝贝(1125591) 13:19:49
创徏U程?U程有个内核对象,句柄的存在对于内核对象的计数+1.关闭句柄以便减少计数.U程退出时q个内核对象删?
北京-li(76433692) 13:22:06
意味着Q句柄不作close U程退出时 内核对象不自动删除?需要手工删除?
北京-li(76433692) 13:22:48
创徏时如果不closeQ在退出线E时候close也是可以的吧Q?br />武汉-Error<errorcpp@qq.com> 13:23:58
贝妞处理q类场景的规范是?br />南昌-贝贝(1125591) 13:24:29
内核对象中保存与U程有关的数?br />有句柄存?q个数据的引用计数就+1
如果不关?那么׃直可以通过q个句柄操作数据l构,操作U程
不关闭的?内核对象在进E退出前怸减少引用.引用?时才删除U程内核对象. 如果你不用它,又不 CloseHandle U程又退Z, q样内核对象q在,好比是有内存泄漏一?br />武汉-Error<errorcpp@qq.com> 13:25:08
用pthread之类的库不会有这L问题?br />南昌-贝贝(1125591) 13:25:09
哥哥我通常保留到句?..以便以后操作, 在线E退出时再删?以后不用操作它的时?q接CloseHandle
武汉-Error<errorcpp@qq.com> 13:25:30
在线E退出时再删?/p>
q是启动U程负责删除
南昌-贝贝(1125591) 13:25:35
是自己删?br />南昌-贝贝(1125591) 13:25:43
pȝl你删除?br />武汉-Error<errorcpp@qq.com> 13:25:53
return 之前 closehandleQ?br />南昌-贝贝(1125591) 13:26:04
你不用操作这个线E了?CloseHandle
武汉-Error<errorcpp@qq.com> 13:28:24
是U程外部整的Q,Q?/p>
武汉-Error<errorcpp@qq.com> 13:28:33
q是贝妞专业?br />武汉-Error<errorcpp@qq.com> 13:28:40
o(|Ӟ`|?o 唉,Q,
当程序调用CreateThread函数Ӟ首先pȝ为线E徏立一个用来管理线E的数据l构Q其中包含线E的一些统计信息,如引用计数和退出码{,q个数据l构被称为线E对象;接下来系l将从进E的地址I间中ؓU程的堆栈分配内存ƈ开始线E的执行。当U程l束ӞU程的堆栈被释放Q但是线E对象不会马上被释放Q系l保留它以便其他U程可以通过它检线E的有关情况Q直C用CloseHandle函数关闭U程句柄后,U程对象才会被释放?/p>
]]>
GetQueuedCompletionStatus
你怎么理解q个函数的lpCompletionKey参数?
吉林-伙 21:59:36
q个Q?
吉林-伙 21:59:46
一个I/O完成?
吉林-伙 21:59:52
q个函数׃d?
湖南-VC(215735031) 22:00:09
再聚焦一?
湖南-VC(215735031) 22:00:29
我指的第三个参数
吉林-伙 22:00:32
然后q个参数传过来的 是你投递的那个h?对应的那个参?
吉林-伙 22:00:41
那个l构的指?
武汉-Error<errorcpp@qq.com> 22:00:44
q是接口
吉林-伙 22:00:50
我也不懂 哈哈
武汉-Error<errorcpp@qq.com> 22:01:06
Z让你舒服?
吉林-伙 22:01:13
CreateIoCompletionPort q个指定?
武汉-Error<errorcpp@qq.com> 22:01:26
如果没有q个参数 你肯定会惛_法实现类似的效果
湖南-VC(215735031) 22:01:54
我明白它的用?
吉林-伙 22:01:59
我就用这个参数得到完成I/O的那个socket?
吉林-伙 22:02:09
你说?br />我学?
湖南-VC(215735031) 22:02:12
但还是觉得没有一个Ş象的词语C?
吉林-伙 22:02:14
我对完成端口 完全不会
湖南-VC(215735031) 22:02:28
说键值对Q不准确
南昌-贝贝(1125591) 22:02:30
lpCompletionKey : 携带和IO句柄相关的数?br />lpOverlapped : 携带和当前这ơIO相关的数?
湖南-VC(215735031) 22:02:34
更像是键?
吉林-伙 22:02:57
贝神 W记
吉林-伙 22:02:58
呵呵
湖南-VC(215735031) 22:03:25
key其实比较形象
湖南-VC(215735031) 22:03:28
钥匙Q?
杭州 -(_?26062281) 22:03:50
咋又玩上IOCP?
吉林-伙 21:57:11
靠h格魅?nbsp;
吉林-伙 21:57:12
哈哈
湖南-VC(215735031) 21:57:17
v来我比你开支还?毛,我喝果粒,大瓶?
吉林-伙 21:57:23
靠激?
吉林-伙 21:57:50
不吹牛g
湖南-VC(215735031) 21:58:46
GetQueuedCompletionStatus
你怎么理解q个函数的lpCompletionKey参数?
吉林-伙 21:59:36
q个Q?
吉林-伙 21:59:46
一个I/O完成?
吉林-伙 21:59:52
q个函数׃d?
湖南-VC(215735031) 22:00:09
再聚焦一?
湖南-VC(215735031) 22:00:29
我指的第三个参数
吉林-伙 22:00:32
然后q个参数传过来的 是你投递的那个h?对应的那个参?
吉林-伙 22:00:41
那个l构的指?
武汉-Error<errorcpp@qq.com> 22:00:44
q是接口
吉林-伙 22:00:50
我也不懂 哈哈
武汉-Error<errorcpp@qq.com> 22:01:06
Z让你舒服?
吉林-伙 22:01:13
CreateIoCompletionPort q个指定?
武汉-Error<errorcpp@qq.com> 22:01:26
如果没有q个参数 你肯定会惛_法实现类似的效果
湖南-VC(215735031) 22:01:54
我明白它的用?
吉林-伙 22:01:59
我就用这个参数得到完成I/O的那个socket?
吉林-伙 22:02:09
你说?br />我学?
湖南-VC(215735031) 22:02:12
但还是觉得没有一个Ş象的词语C?
吉林-伙 22:02:14
我对完成端口 完全不会
湖南-VC(215735031) 22:02:28
说键值对Q不准确
南昌-贝贝(1125591) 22:02:30
lpCompletionKey : 携带和IO句柄相关的数?br />lpOverlapped : 携带和当前这ơIO相关的数?
湖南-VC(215735031) 22:02:34
更像是键?
吉林-伙 22:02:57
贝神 W记
吉林-伙 22:02:58
呵呵
湖南-VC(215735031) 22:03:25
key其实比较形象
湖南-VC(215735031) 22:03:28
钥匙Q?
杭州 -(_?26062281) 22:03:50
咋又玩上IOCP?
湖南-VC(215735031) 22:03:50
兌file handle的时候,指定一把钥?
武汉-Error<errorcpp@qq.com> 22:04:06
贝贝是贝贝
湖南-VC(215735031) 22:04:10
收到通知的时候,pȝq回q把钥匙
武汉-Error<errorcpp@qq.com> 22:04:24
有了q个以后 ׃需要自己做map?
武汉-Error<errorcpp@qq.com> 22:04:57
我觉得是q样?nbsp; socket handle 要和一个更加抽象的handle 兌h
湖南-VC(215735031) 22:05:10
map ?keyvalue 有得一拼啊
湖南-VC(215735031) 22:05:44
如果hsocket是key, 一个更丰满的结构体是value
武汉-Error<errorcpp@qq.com> 22:05:57
扩展下话题吧
湖南-VC(215735031) 22:06:02
那么pȝ完成通知后,q回一个丰满的value?
吉林-伙 22:06:15
今天你可别发会议记录?
吉林-伙 22:06:16
呵呵
吉林-伙 22:06:22
我该丢h?
吉林-伙 22:06:28
哈哈 不懂完成端口
武汉-Error<errorcpp@qq.com> 22:06:39
异步的socket分成两类
一cL?socket句柄作ؓkey
一cL?每次IO动作为key
武汉-Error<errorcpp@qq.com> 22:06:48
貌似我最q半q就q收?
湖南-VC(215735031) 22:06:51
GetQueuedCompletionStatus ?WSARecv, WSASend驱动
武汉-Error<errorcpp@qq.com> 22:07:04
贝贝刚刚一句话炚w了很多
湖南-VC(215735031) 22:07:08
而WSARecv又必M入有效的hSocket,
武汉-Error<errorcpp@qq.com> 22:07:21
IOCP ?两种模型 都有key
湖南-VC(215735031) 22:07:20
而这个hSocket又是之前的keyvalue的键
武汉-Error<errorcpp@qq.com> 22:07:29
是滴
武汉-Error<errorcpp@qq.com> 22:08:00
听贝一席话Q胜写十q代?
湖南-VC(215735031) 22:08:12
说到底,都是围绕hSocketQ?nbsp;
武汉-Error<errorcpp@qq.com> 22:08:35
恩,但是IOCP
武汉-Error<errorcpp@qq.com> 22:08:47
q需?Ҏơ的投?标记
武汉-Error<errorcpp@qq.com> 22:08:57
所以就有了 后面那个参数?
武汉-Error<errorcpp@qq.com> 22:09:26
看过一个网l项目的代码
武汉-Error<errorcpp@qq.com> 22:09:32
他是l每个socket句柄
武汉-Error<errorcpp@qq.com> 22:09:41
配一个inbuffer 一个outbuffer
南昌-贝贝(1125591) 22:10:08
完成端口又不是专l?nbsp; socket 用的
武汉-Error<errorcpp@qq.com> 22:10:13
创徏完成端口的时?nbsp; 把这个对象的地址最为key
杭州 -(_?26062281) 22:10:25
那还l什么用?
武汉-Error<errorcpp@qq.com> 22:10:41
所有的handle都可以好?nbsp;
吉林-伙 22:10:42
我用的时?
吉林-伙 22:10:45
弄一个buffer
南昌-贝贝(1125591) 22:10:51
所有IO操作都可以用
湖南-VC(215735031) 22:10:53
说到底都围绕一个file handle
吉林-伙 22:11:02
?
武汉-Error<errorcpp@qq.com> 22:11:02
q可以当作线E池?
杭州 -(_?26062281) 22:11:09
?nbsp; recv send q些函数 可以?
南昌-贝贝(1125591) 22:11:22
recv send 是同步的
武汉-Error<errorcpp@qq.com> 22:11:49
recv是伯克利标准?
南昌-贝贝(1125591) 22:11:48
道我也用IOCP
湖南-VC(215735031) 22:12:10
我想C个Ş象点的比M?
武汉-Error<errorcpp@qq.com> 22:12:23
?
杭州 -(_?26062281) 22:12:32
不是有个函数可以讄的吗
杭州 -(_?26062281) 22:13:43
难怪上ơ有个h和我说iocp 不要拘惔于socket
杭州 -(_?26062281) 22:14:01
学习?感谢贝神
武汉-Error<errorcpp@qq.com> 22:14:58
LPOVERLAPPED *lpOverlapped,
武汉-Error<errorcpp@qq.com> 22:15:01
q个参数
吉林-伙 22:15:02
在我q没接触IOCP的时?br />q个里
武汉-Error<errorcpp@qq.com> 22:15:16
一般咋设计?nbsp;
湖南-VC(215735031) 22:15:17
pȝ接收一个外部链接套接字Q可以比作一张纸条,上面1表示一个编P把这张纸贴在一个瓶子上Q这个瓶子就相当于completionKey, 当系l完成某个动作,相当于把瓶子里注满水QGetQueuedCompletionStatus 的时候是q整个瓶子扔回来的,瓶子上自然有那个sock1标签?
吉林-伙 22:15:19
pqNơIOCP不只用于|络
武汉-Error<errorcpp@qq.com> 22:15:20
大伙?
南昌-贝贝(1125591) 22:15:46
重叠l构由微软内部?Z农村的一般不知道里面q啥?
吉林-伙 22:15:49
Q?
湖南-VC(215735031) 22:16:34
哈哈Q讨Z下,加׃印象?下次再有什么抽象的再跟你们讨论谈论
湖南-VC(215735031) 22:17:19
一pd的操作都是围l那张纸q行的?
武汉-Error<errorcpp@qq.com> 22:17:31
本期的主题就??IOCP lpCompletionKey湖南VC哥丢q标签?
吉林-伙 22:17:33
理解不上?
湖南-VC(215735031) 22:17:40
得, error,别写我?
湖南-VC(215735031) 22:17:45
伙 哪里不理?
武汉-Error<errorcpp@qq.com> 22:17:47
q没完咧
吉林-伙 22:17:59
我根本就不懂完成端口
武汉-Error<errorcpp@qq.com> 22:18:00
q没?怎么标记 每次Q,Q?
吉林-伙 22:18:02
一炚w不懂
武汉-Error<errorcpp@qq.com> 22:18:13
你刚刚标C 瓶子
湖南-VC(215735031) 22:18:22
hSocket U条
lpCompletionKey 瓶子
武汉-Error<errorcpp@qq.com> 22:18:25
现在要标记每ơ打水的动作
湖南-VC(215735031) 22:18:37
当纸条脓到瓶子的时候,Q,
湖南-VC(215735031) 22:18:52
对的
武汉-Error<errorcpp@qq.com> 22:18:55
q个应该?lpOverlapped的工作了
湖南-VC(215735031) 22:19:05
我想惛_怎么把WSARecv兌q来
湖南-VC(215735031) 22:19:29
阿姨Q我要一瓶水?
湖南-VC(215735031) 22:19:46
WSARecv Q向pȝh一瓶水
杭州 -(_?26062281) 22:19:48
我看了一部分关于iocp的资?
武汉-Error<errorcpp@qq.com> 22:20:06
IOCP要用Q,Q看没什么用的,
杭州 -(_?26062281) 22:20:18
但是 书上没有 vc 讲的那么生动
湖南-VC(215735031) 22:20:30
你不N姨要_ GetQueuedCompletionStatus 怎么会事先知道你要水Q还把水瓶丢回给你?
武汉-Error<errorcpp@qq.com> 22:21:01
vc臛_沉淀?6 7q了
恩,要是 post动作
武汉-Error<errorcpp@qq.com> 22:22:55
应该是调酒师
北京—文文(15692091) 22:23:13
北京程序员求职。。?br />有没有要招h的~
吉林-伙 22:23:11
你们说下q个完成端口的原理呗
吉林-伙 22:23:19
让我pȝ学习学习
北京—文文(15692091) 22:23:26
完成端口Q?
湖南-VC(215735031) 22:23:23
q里阿姨的地Ҏ个小l节
吉林-伙 22:23:25
用过几次 也不得要?
武汉-Error<errorcpp@qq.com> 22:23:29
你每ơ要调不同的酒水 都要下单
吉林-伙 22:35:20
要用一个线E来{待客户端的h
武汉-Error<errorcpp@qq.com> 22:35:31
今天的mvp
杭州 -(_?26062281) 22:35:37
q个一般算是主U程?
武汉-Error<errorcpp@qq.com> 16:37:38
?/p>
讨论一个VC的问?nbsp;
武汉-Error<errorcpp@qq.com> 16:37:51
夸进E的 WM_DATACOPY
武汉-Error<errorcpp@qq.com> 16:38:00
的内存管?
武汉-Error<errorcpp@qq.com> 16:38:07
谁先发言Q?