同样的操作,为什么我用菜单触发不会产生错误,而用其他线程调用的时候出现内存访问错误

abiho 2003-12-17 05:26:29
如题!

我在视图类的oncreate里调用打开数据库正常,但是用另外的线程打开就报错,而用timer也不会报错!

...全文
58 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
taoni 2003-12-18
  • 打赏
  • 举报
回复
用下线程的时候要注意时序问题
akiy 2003-12-18
  • 打赏
  • 举报
回复
用程序调用菜单
让菜单启动你的程序
Xsean 2003-12-18
  • 打赏
  • 举报
回复
要看你是怎么访问这些公有变量的,最好给出示例代码


CoInitializeEx与AfxOleInit用途一致的,AfxOleInit进行了封装.
线程里
CoInitializeEx(NULL,COINIT_MULTITHREADED);
......
......
CoUninitialize()
abiho 2003-12-18
  • 打赏
  • 举报
回复
我重载了CStatic,然后加了几个设置函数,在mainframe里定义了公有变量,在界面上显示一些文字,在其它线程访问时就会出错,可是我并没有在主线程里修改这几个值!

还有上面提到的[多线程里应该CoInitializeEx(NULL,COINIT_MULTITHREADED);],应该怎么使用,再说点吧!

谢谢各位!
xiaohonghong 2003-12-18
  • 打赏
  • 举报
回复
注意线程之间的同步,譬如用互斥等
abiho 2003-12-18
  • 打赏
  • 举报
回复
还有啊,比如说在mainframe里定义的变量,我在view里用其它线程修改也会出现内存访问错误!
数据库我用的是ado
在程序里
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
然后打开
abiho 2003-12-18
  • 打赏
  • 举报
回复
呵呵,还有么
lovenoend 2003-12-17
  • 打赏
  • 举报
回复
同意 Xsean()
多线程里应该CoInitializeEx(NULL,COINIT_MULTITHREADED);
checkyvc6 2003-12-17
  • 打赏
  • 举报
回复
CoInitializeEx(NULL,COINIT_MULTITHREADED);
8412230 2003-12-17
  • 打赏
  • 举报
回复
是呀,使用的什么方法调用的呀!!说得详细点,大家看看
Xsean 2003-12-17
  • 打赏
  • 举报
回复
你用的什么方法调用数据库?如果是COM方式,例如ADO,在多线程里应该 CoInitializeEx(NULL,COINIT_MULTITHREADED);

timer不是多线程

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧