背景如下:
为了处理多线程发送过程,声明了一个list m_Sendlist用于存储发送的数据,通过postevent异步发送。
问题:
但是,发现数据发送不出去,根据堆栈查找,发现是list在push_back 时不成功,令我不解的是没有抛出异常,只是无法成功将数据push进list中。在push前后list均是empty
说明:
我在发送的地方打了断点,所以不存在刚push就被发送线程pop的情况。我今天反复试验,没有复现,焦虑中......
如有表述不清的地方,见谅。
如有能力不足的表现,见笑。
604 unique_lock<mutex> lck(m_SendMutex);
(gdb) n
606 CPackage* tmpPack = new CPackage;
(gdb)
(中间过程省略)
(gdb)
611 m_Sendlist.push_back(pair<DWORD, CPackage*>(dwSessionid, tmpPack));
(gdb) p m_Sendlist
$6 = empty std::list
(gdb) n
612 CEventHandler::PostEvent(EVENTID_SendDialogPackage, 0, nullptr);
(gdb) p m_Sendlist
$7 = empty std::list
(gdb) c
--重新启动了进程,重新进入中断。一切看起来又正常了
604 unique_lock<mutex> lck(m_SendMutex);
(gdb) n
606 CPackage* tmpPack = new CPackage;
(gdb)
(中间过程省略)
(gdb)
611 m_Sendlist.push_back(pair<DWORD, CPackage*>(dwSessionid, tmpPack));
(gdb) p m_Sendlist
$8 = empty std::list
(gdb) n
612 CEventHandler::PostEvent(EVENTID_SendDialogPackage, 0, nullptr);
(gdb) p m_Sendlist
$9 = std::list = {[0] = {first = 1687224323, second = 0x7fff74009900}}
(gdb) c
--
FROM 60.247.90.*