我现在用mfc编了一个简单的数学工具软件,有一个问题就是比如计算积分时可能耗时很长,像死机了一样,我想添加一个按键,按下后中止运算。
我查资料发现需要多线程来解决,我就在计算前用AfxBeginThread新建了一个线程,然后定义了一个全局变量,按暂停键时改变它的值,在计算过程中检查,如果值改变就用AfxEndThread退出进程,可现在运行起来总是报错,(大概是 读取位置 0x00000000 时发生访问冲突)
由于时间比较紧,实在没时间仔细研究了,哪位高手能帮我改一下?
我可以将程序的源代码发给你,帮我把这个功能添加上去,多谢了啊
我查资料发现需要多线程来解决,我就在计算前用AfxBeginThread新建了一个线程,然后定义了一个全局变量,按暂停键时改变它的值,在计算过程中检查,如果值改变就用AfxEndThread退出进程,可现在运行起来总是报错,(大概是 读取位置 0x00000000 时发生访问冲突)
由于时间比较紧,实在没时间仔细研究了,哪位高手能帮我改一下?
我可以将程序的源代码发给你,帮我把这个功能添加上去,多谢了啊
我简化一下,你们看看是不是有更好的处理方法?CString temp1,temp2; //全局变量,因为不知道怎么把输出字符串从Funproc里传出去……
UINT FunProc( LPVOID pParam )
{
Integral_Simpson *s=(Integral_Simpson*)pParam;
double result=s->calculate(temp1); //计算积分,temp1是读入的输入
temp2.Format("%lf",result); //将结果转换为字符,temp2是输出
return 0;
}
void Page4::OnBnClickedButton2()
{
…………
Integral_Simpson sample(low,high,itr); //一个积分方法的类
temp1=Editcalculus; //Editcalculus是读入的CString输入 AfxBeginThread(FunProc,&sample); //新建一个线程
Outcalculus=temp2; //Outcalculus是CString输出…………}
double Integral_Simpson::calculate(CString input) //计算积分的函数
{
…………
for(int j=1;j<=nmax;j++)//nmax是迭代次数
{
if(stop==1)
AfxEndThread(0);
…………
}
…………
}
void CAboutDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
stop=1;
}