最近几个容易错的地方总结(hash_map迭代删除,localtime(),线程状态)
一.有关hash_map的使用
map中可以用 map.erase(it++)或者it = map.erase(it);来实现迭代删除
但是在hash_map中
这个函数声明和定义是不存在的
取而代之的是
但它本身也没有实现迭代删除
如果要迭代删除的话 还是要用 erase(it++)
二.localtime()的误用
localtime的函数声明如下:
而localtime的内部实现是一个static变量,所以,如果你这样调用:
struct tm *p1=localtime(&t1);
sleep(10);
time_t t2=time(NULL);
struct tm *p2=localtime(&t2);
将会造成p1和p2的值相等……
解决方法就是:
struct tm tm1;
localtime_r(&t1,&tm1);
sleep(10);
time_t t2=time(NULL);
struct tm tm2;
localtime_r(&t2,&tm2);
localtime_r的定义如下:
三.检测线程是否存在
检测进程是否存在是很简单的,但是很少会有需求检测线程是否存在,但是实际上也会遇到这种情况。
解决方法很简单,就是对线程发送一个无关紧要的信号,查看返回值即可,代码如下:
if(pthread_kill_err == ESRCH)
{
ERROR_LOG(“ID为0x%x的线程不存在或者已经退出。\\n”,(unsigned int)threadid);
}
else if(pthread_kill_err == EINVAL)
{
ERROR_LOG(“发送信号非法。\\n”);
}
else
{
ERROR_LOG(“ID为0x%x的线程目前仍然存活。\\n”,(unsigned int)threadid);
}
建议继续学习:
- 腾讯敏捷开发及快速迭代 (阅读:7381)
- 循环、迭代、遍历和递归 (阅读:5101)
- 进程和线程关系及区别 (阅读:4865)
- MySQL为什么要引入Thread Pool的线程处理模式 (阅读:4283)
- 实现多线程对队列的读写操作(封装类) (阅读:3757)
- InnoDB线程并发检查机制 (阅读:3395)
- 检查 Linux 下线程库的类型 (阅读:3306)
- C++11(及现代C++风格)和快速迭代式开发 (阅读:3252)
- Perl 的线程中的共享 (阅读:3153)
- Perl 的线程中的锁 (阅读:2686)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: 线程 迭代
- 发布时间:2009-11-20 21:05:28
-
[886] WordPress插件开发 -- 在插件使用 -
[136] 解决 nginx 反向代理网页首尾出现神秘字 -
[56] 整理了一份招PHP高级工程师的面试题 -
[54] 分享一个JQUERY颜色选择插件 -
[54] Innodb分表太多或者表分区太多,会导致内 -
[54] 如何保证一个程序在单台服务器上只有唯一实例( -
[53] jQuery性能优化指南 -
[52] 用 Jquery 模拟 select -
[52] 海量小文件存储 -
[51] CloudSMS:免费匿名的云短信
