程序发生错误的时候会出现这种提示:"an unsupported operation was attempted"
我的程序加载了我的DLL,并创建了两个线程(A,B),线程A打开了DLL中的一个窗口(tdlg.DoModal();),线程B监视线程一是否结束。
DLL中的窗口上有个按钮,按下之后创建两个线程(C,D)。线程D监视线程C是否结束。
线程C中,一开始是一些初始化动作,之后是一个大循环,循环结束的条件是数据处理完毕或者按下设定好的热键。
线程A,C,D的代码都在Dll中。
因为有错误,所以,我在创建线程A的时候就传递了一个整形实参的地址进去,并在线程C中不同的位置赋予此参数不同的值,以标识在何处发生错误。当线程B监视到线程A结束的时候就会把参数的值显示出来。(线程C发生错误时,会导致窗口关闭,也就是导致线程A结束)。
测试的结果很令人郁闷,似乎发生错误的地方是绝对不可能发生错误的。
一下是一些关键代码:
void AutoPlay()
{
//省略了一部分...
*结束码=1;//结束码 记录的地址就是我传递进来的地址
while(!需要停止)//需要停止是个BOOL类型的全局变量。一开始为0
{
Sleep(1);
*结束码=2;
//省略.....
if(QQGame_hwnd)
{
*结束码=7;
//省略.....
*结束码=716;
continue;
}
*结束码=8;
//省略....
}
}
发生错误之后,线程B显示 结束码 的数值为 716。也就是说错误在 continue;或者 while(!需要停止) 这两个位置发生的?似乎这两个位置不可能出错呀!
在循环中,并不是每次循环到716处就出错。只是有时。大概一两个小时碰上一次。