问题一:我在一个线程内打开串口(打开串口程序我写成了dll,函数名为opencomm),为什么在调用opencomm之后必须要有AfxMessageBox("***")才能正常打开,否则不行?
问题二:我在一个dlg的OnInitDialog中打开了一个数据库(Access database),在dlg上有一个button,buttonClick中弹出CFileDialog对话框选择一个文件打开之并输出结果到一个EditBox中,dlg的OnClose关闭数据库,问题是只要执行了buttonClick弹出CFileDialog对话框,那么再次进入该dlg中,数据库一定打不开,不执行buttonClick则可以,buttonClick中不弹出CFileDialog对话框也一切正常,buttonClick代码大体如下:
CFileDialog fileDlg ( TRUE ,
".*",
NULL,
NULL,
"所有文件(*.*)|*.*||"
);
if( fileDlg.DoModal() == IDOK )
{
...
...
...
}
请问这是为什么?
问题二:我在一个dlg的OnInitDialog中打开了一个数据库(Access database),在dlg上有一个button,buttonClick中弹出CFileDialog对话框选择一个文件打开之并输出结果到一个EditBox中,dlg的OnClose关闭数据库,问题是只要执行了buttonClick弹出CFileDialog对话框,那么再次进入该dlg中,数据库一定打不开,不执行buttonClick则可以,buttonClick中不弹出CFileDialog对话框也一切正常,buttonClick代码大体如下:
CFileDialog fileDlg ( TRUE ,
".*",
NULL,
NULL,
"所有文件(*.*)|*.*||"
);
if( fileDlg.DoModal() == IDOK )
{
...
...
...
}
请问这是为什么?
{
...
...
...
}
在里面一定要UpdateData(FALSE);
解决办法: 1. 在弹出CFileDialog以前先调用GetCurrentDirectory()(好久没用了,好像是这个函数)保存当前路径,使用完CFileDialog后,你要调用SetCurrentDirectory()恢复当前路径。
2. 把access数据文件的路径设为绝对路径问题一: 你是用什么方式打开的串口。请写的详细一些。
你加上AFX_MANAGE_STATE(AfxGetStaticModuleState());试试
应该是线程中调用了malloc或者类似的函数,然后释放内存,但是多线程如此调用往往使用不当会产生意想不到的错误。跟踪调试的时候不会报错,编译之后其他程序调用产生错误,如果用messagebox之类的用户交互的窗体产生一个延迟(或者sleep一段时间)同样不会报错。
如果是这个问题,你将messagebox替换城sleep,看看有什么效果?
今天下午关注
用OFN_NOCHANGEDIR 标志打开CFileDialog就不会修改当前路径,没必要去Get\Set。
用OFN_NOCHANGEDIR 标志打开CFileDialog就不会修改当前路径,没必要去Get\Set。
难道你也sleep了:)