• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 用VC写COM为VB提供临界区功能的问题

用VC写COM为VB提供临界区功能的问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vc 临界区,vb和vc的区别,vb vc,vc和vb能同时吃吗,vb和vc能一起吃吗等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 用VC写COM为VB提供临界区功能的问题
描述:

VB下,想实现程序各个部分对数据库链接资源使用的独占,VB程序本身没有使用多线程API。参考文档中心的一篇“vb实现多线程 (S.F.)”,使用的是临界区,但是那篇文章提供的用API调用临界区功能的方法,不能执行,一运行就提示内存地址错误,连VB都退出了。而且临界区是需要初始化的,那篇文章中也没有提及,并且临界区API的参数是结构指针。不知道有没有人用API的方法实现成功过。
所以,我就想用VC写个组件给VB调用来实现临界区功能。在VC中使用ATL向导,建立的对象,基本代码如下,多余的自动生成代码略去:
class critical_sec : 
{
public:
critical_sec() 
{
InitializeCriticalSection(&crisec);
}
~critical_sec() 
{
DeleteCriticalSection(&crisec);
}
public:
STDMETHOD(leaveSec)();
STDMETHOD(enterSec)();
private:
CRITICAL_SECTION crisec;
};
STDMETHODIMP critical_sec::enterSec()
{
EnterCriticalSection(&crisec);
return S_OK;
}
STDMETHODIMP critical_sec::leaveSec()
{
LeaveCriticalSection(&crisec);
return S_OK;
}
编译成功,并且在VB中也成功使用,没有任何错误。
VB中的程序是,建立一个timer,每2秒向文本框中添加一行当前时间。另有一个按钮,按一下就向文本框中添加一行文字。
引用并建立这个com后,当timer向文本框中添加文字时,先调用enterSec,然后添加文字,然后sleep(用API)1秒,然后才leaveSec。而按钮添加文字时,也是先enterSec,然后添加文字,再leaveSec,没有sleep。
这个timer 中 sleep的时间,希望按钮不能向文本框中添加文字,但实际试验确没有任何效果,用按钮向文本框添加文字不受任何影响。也没有任何错误提示。
请问大家,怎么才能给VB实现临界区,或其他对资源的独占功能。


解决方案1:

>>用按钮向文本框添加文字不受任何影响
临界区又不能你的操作取消,只是让你等待而已,你将Sleep的时间改为60 * 1000后再试试


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 用VC写COM为VB提供临界区功能的问题

相关文章

  • 2017-06-05 如何实现当一个文件生成之后,我的程序得到响应?
  • 2017-06-04 c++进程线程绑定CPU用SetProcessAffinityMask为什么最多只能绑定到32个cpu
  • 2017-06-05 在vc中如何动态地加载封装在dll中的类?
  • 2017-06-05 写一个BHO的时候程序里无法使用CString类
  • 2017-06-04 VC下如何接收COM+事件
  • 2017-06-04 动态调用dll时总是出现accessviolation这个错误,求大神解救
  • 2017-06-04 请问ActiveX的编写流程菜鸟急求
  • 2017-06-05 根据进程ID,如何得到该进程使用内存的大小?
  • 2017-06-04 诚恳请教,用ATL制作COM组件,为什么接口函数的参数不能是char??有什么解决办法吗??
  • 2017-06-05 线程停止的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 怎样象任务管理器那里知道当前有那些应用程序在运行?
    • 关于ActiveX发布的一个问题
    • VC怎么不认识/wdn选项了?
    • 如何获得窗口句柄?
    • 新手问问题:制作以对话框作为界面的ActiveX控件的问题
    • 请问哪儿有可编辑的表格控件,只用来修改属性就可以了,不需要支持数据库的。
    • 浏览按钮设置后跟它相关的声音文件怎样生效播放?
    • 初级错误,请大侠指教。
    • 关于读注册表串口个数的一段代码,求逐行解释
    • 如何做一个的DLL形式的木马程序,在系统启动时自动运行

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有