Boost入门二之thread遇到的坑

  1. 最近写了个控制台程序,设计的是多线程,在主线程中起了2个子线程,然后主线程使用join等待子线程结束,其实子线程在while(true)里面,不会停止。运行一切正常的。但是,在关闭程序的时候总是报错,读取不存在的内存非法,表现跟读取空指针类似。然后就是上网各种搜索,一般别人的情况就是数组越界,指针非法之类的。同事也说可能调用了已经释放的指针,但测下来都不是,最后发现问题是出在jion那。于是,就写了个多线程的简单demo,模拟出了这种情况。 输入图片说明

2.在程序非正常退出,比如关闭控制台程序,主程序退出,子线程还在那,没有给子线程发出中断指令,就出现了图中错误。当然,最后主线程退出的话,子线程还是会退出,但是报错就会给用户留下了不好的体验。查了一把,还没找到合适的能捕捉控制台关闭的事件,后续的打算是把控制台改成MFC对话框,那个可以捕获X按钮事件。

#include <iostream>
#include <Windows.h>

void printing(void *p)  {
int j = *(int *)p;
cout<<j<<endl;
	Sleep(90000);
}
int main(int argc, char* argv[])
{
int i = 9;
	boost::thread thrd(printing, &i);
	
    thrd.join(); 
	return 0;
}

转载于:https://my.oschina.net/ikel/blog/1523167

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值