你用一个测CPU和内存占用率的软件,在你调试这个程序时看看你CPU和内存的使用率达到了怎样的高度。
可能的原因:
1、程序设计不合理,线程过多,达到了系统处理的极限而自动终止调试
2、有极占内存的死循环存在,检查下
3、有不安全代码(如果你是用C#编写的,这个可能性就较小了,或者说基本没有)
建议:重新检查一遍你的程序,最好拿一张白纸来边检查边画个程序流程图,画完后审视一番,问题、缺陷就一目了然了,多半还是程序设计上的不合理造成的。也可能是设计思路不佳,大方向上走偏了,这个的话就一定要把程序的前前后后在纸上设计好了之后再具体写代码。注意弄清楚你每一步的目的是要干什么,很重要的。画流程图的确是个好习惯,尤其在程序庞大、 *** 作复杂的时候,擅画流程图将带来很大好处,不仅帮忙理清思路提高程序编写的效率,而且极大减少了错误的发生。
祝你好运咯~~
用多线程同步技术,即一个线程将要取得数据区锁定,另一个线程此时不能存取此块的数据。
看看多线程同步的书。
例如:
void CCalibPage1::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
UpdateData();
m_nCounter++;
double r;
CSingleLock sLock(&(gpMainFrm->m_mutex));
sLockLock();//此处锁定
double v = gSpindleRevolution;
sLockUnlock();//存取后释放。
if(m_bCalibStart)
{
r = m_CalibValue/v;
m_szTestValue0Format("%f",v);
// m_szTestValueFormat("%f", (v r));
m_szRatioFormat("%f", r);//
UpdateData(false);
}
else if(m_bVerify)
{
m_szTestValueFormat("%f",vgcConfigcalib[PCL833_CHANNEL]ratio);
UpdateData(false);
}
if(m_nCounter > 30)
{
KillTimer(11);
m_bCalibStart = false;
m_bVerify = false;
MessageBox(_T("标定完成!"),_T("CNCTest"));
UpdateButtonStatus();
}
CPropertyPage::OnTimer(nIDEvent);
}
参见:
>
加个判断
if (SqlHelperconnectionState == SystemDataConnectionStateClosed)SqlHelperconnectionOpen();
else (SqlHelperconnectionState == SystemDataConnectionStateBroken)
{
SqlHelperconnectionClose();
SqlHelperconnectionOpen();
}
你问题描述不清楚,那里出问题了?还是不会多线程?还是多线程报错?想别人问题之前自己要先整理出清晰的描述问题的思路,否则很难得到满意的答案哦~~~
创建线程不用多说,我想你肯定知道。
执行插入 *** 作,无非就是在线程中执行 INSERT 语句而已。
注意事项及要点:
1)最好不要多根线程共享一个 Connection 连接对象,否则极可能报错。
2)如果必须多根线程共用一个 Connection 连接对象,必须设置互斥锁。
针对1:在线程方法中创建 Connection 对象,并执行 INSERT 语句。
针对2:用 lock 关键字锁住注资源(如:lock(connection){ 执行 INSERT 语句的代码 })
注1:Connection 对象,不支持多线程并发,因此两个或以上线程同时使用 Connection 对象会发生错误。
注2:利用 lock 关键字的例子,其实就是利用互斥锁保证在某个时间片中,只有一根线程访问连接对象。
以上就是关于VS2010编写的WinForm程序,在调试运行了几个小时候后d出: 正在停止调试,但尚未完成你可以强制立即停止全部的内容,包括:VS2010编写的WinForm程序,在调试运行了几个小时候后d出: 正在停止调试,但尚未完成你可以强制立即停止、请教:MFC多线程数据库编程ado,数据库访问冲突。、c#socket多线程与数据库同时读写的连接问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)