c语言线程不安全错误定位,C语言中的线程安全可破坏事件触发类#
最近,我被要求实现一个类作为选择过程的一部分。我按要求做了这个节目。但是,我考试不及格。我真的很想知道我的解决方案出了什么问题。任何帮助都非常感谢。问题和我的解决方案如下
实现一个线程安全类,该类在构造过程中每秒触发一个事件。需要有一个函数来查找经过的秒数。这个类必须实现IDisposable,调用dispose后对seconds elapsed函数的任何调用都应该失败。
我的解决方案:
namespace TimeCounter
{
public delegate void SecondsElapsedHandler(object o, EventArgs e);
///
/// Summary description for SecondCounter
///
public class SecondCounter : IDisposable
{
private volatile int nSecondsElapsed;
Timer myTimer;
private readonly object EventLock = new object();
private SecondsElapsedHandler secondsHandler;
public SecondCounter()
{
nSecondsElapsed = 0;
myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler(OneSecondElapsed);
myTimer.Interval = 1000;
myTimer.AutoReset = false;
myTimer.Start();
}
public void OneSecondElapsed(object source, ElapsedEventArgs e)
{
try
{
SecondsElapsedHandler handlerCopy;
lock (EventLock)
{
handlerCopy = secondsHandler;
nSecondsElapsed++;
}
if (secondsHandler != null)
{
secondsHandler(this, e);
}
}
catch (Exception exp)
{
Console.WriteLine("Exception thrown from SecondCounter OneSecondElapsed " + exp.Message);
}
finally
{
if (myTimer != null)
{
myTimer.Enabled = true;
}
}
}
public event SecondsElapsedHandler AnotherSecondElapsed
{
add
{
lock (EventLock)
{
secondsHandler += value;
}
}
remove
{
lock (EventLock)
{
secondsHandler -= value;
}
}
}
public int SecondsElapsed()
{
if (this.IsDisposed)
{
throw new ObjectDisposedException("SecondCounter");
}
return nSecondsElapsed;
}
private bool IsDisposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool Disposing)
{
if (!IsDisposed)
{
if (Disposing)
{
}
if (myTimer != null)
{
myTimer.Dispose();
}
}
secondsHandler = null;
IsDisposed = true;
}
~SecondCounter()
{
Dispose(false);
}
}
}
c语言线程不安全错误定位,C语言中的线程安全可破坏事件触发类#相关推荐
- java让线程空转_详解Java编程中对线程的中断处理
1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时--都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...
- Qt工作笔记-线程池作用之一:限制系统中执行线程的数量
一.线程池的作用: 线程池作用就是限制系统中执行线程的数量. 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果:少了浪费了系统资源,多了造成系统拥挤效率不高.用线程池控制线程数量,其 ...
- c语言工资管理系统输出错误,求c语言工资管理系统的源代码?
该程序输入职工工号和应发工资,由系统对其完成的实发工资实现计算. 其中职工信息包括职工号.姓名.性别.应发工资.税金.实发工资等(职工号不重复). 功能要求及说明: 系统以菜单方式工作 职工基本信息和 ...
- c语言abr是什么错误类型,C语言真他妈难
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /* + + + + [ >i>n[t */ #include /*2w0,1m2,]_r>i>=>(['0n1'0)1; ...
- java线程提高速度_如何在JAVA中减慢线程速度
我有这个类,我在其中运行10次for循环.该类实现了Runnable接口.现在在main()中我创建了2个线程.现在两个都将循环运行到10.但我想检查每个线程的循环计数.如果t1超过7,则让它休眠1秒 ...
- python线程执行完后释放内存_Python中的线程终止与内存释放
但我注意到,内存并没有释放(gc.get_objects()不断增长).实际上,这些对象是列表.dict等,而不是文件.在 有没有办法手动释放资源? 代码:import ctypes def term ...
- 小程序errno_错误:UNIX程序中的errno
小程序errno UNIX®开发人员经常忽略正确的错误检测和恢复. C语言缺乏例外,而标准C库缺少基本的错误机制,无疑是造成这种情况的原因. 本文使您熟悉标准C库中的UNIX错误报告,并(希望)鼓励您 ...
- 同一进程中的线程究竟共享哪些资源
线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID. 进程拥 ...
- python线程安全的计数器_+ =运算符在Python中是线程安全的吗?
+ =运算符在Python中是线程安全的吗? 我想为实验创建一个非线程安全的代码块,这些是2个线程将要调用的函数. c = 0 def increment(): c += 1 def decremen ...
最新文章
- 南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup
- win7计算机不支持此接口,win7系统IIS服务器启动失败显示不支持此接口的解决方法...
- tim指定保存云服务器_阿里云发布 Cloud Toolkit for VS Code 新版本!一键打包部署,开发提速 8 倍...
- Java 套接字Socket
- Swift里计数相关的小细节
- java 字符串是对象吗_解析Java中的String对象的数据类型
- html页面tableview,用JS写的一个TableView控件代码
- JAVA中 fastjson两个JSONArray叠加,合并 ,方法 addAll()
- 多线程爬取图片 -Java
- HDOJ-1232 畅通工程
- PHP使用Apache中的ab测试网站的压力性能及mpm介绍
- git常用命令让你几步摆脱图形工具提交项目
- 【数码复印新生态】东芝泰格强势支持统信UOS
- pyside6的MQTT客户端
- win7系统关闭蓝牙服务器,深度官方Win7旗舰版系统如何开启蓝牙功能服务
- python数组求和_python数组求和
- java计算机毕业设计基于安卓Android的禁毒宣传APP(源码+系统+mysql数据库+Lw文档)
- 写字机器人软件_被误解的写字机器人应该如何为自己正名?
- docker下载镜像新建容器打包容器打包tar加载tar
- 使用oschina的git服务器
热门文章
- java字符串数组排序_在Java中对字符串数组进行排序
- 卡苹果6plus在线_@哈尔滨家长:学生卡初次申办,需要到线下网点办理!
- centos双系统只有linux,Centos添加Windows/Centos双系统启动
- 圆弧半径计算图解_刀尖圆弧半径补偿G40,G41,G42 左补偿右补偿你真的能搞清楚吗...
- oracle 表 上限,Oracle分区表(Partition Table)的数量限制
- cmos和ttl_TTL电平和CMOS电平的区别
- 王爽 汇编语言第三版 第11章 标志寄存器
- c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法
- 现代软件工程系列 学生读后感 梦断代码 DTSlob (2)
- php3绕过,PHPB2B注入#3(绕过过滤)