最近,我被要求实现一个类作为选择过程的一部分。我按要求做了这个节目。但是,我考试不及格。我真的很想知道我的解决方案出了什么问题。任何帮助都非常感谢。问题和我的解决方案如下

实现一个线程安全类,该类在构造过程中每秒触发一个事件。需要有一个函数来查找经过的秒数。这个类必须实现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语言中的线程安全可破坏事件触发类#相关推荐

  1. java让线程空转_详解Java编程中对线程的中断处理

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时--都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  2. Qt工作笔记-线程池作用之一:限制系统中执行线程的数量

    一.线程池的作用: 线程池作用就是限制系统中执行线程的数量. 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果:少了浪费了系统资源,多了造成系统拥挤效率不高.用线程池控制线程数量,其 ...

  3. c语言工资管理系统输出错误,求c语言工资管理系统的源代码?

    该程序输入职工工号和应发工资,由系统对其完成的实发工资实现计算. 其中职工信息包括职工号.姓名.性别.应发工资.税金.实发工资等(职工号不重复). 功能要求及说明: 系统以菜单方式工作 职工基本信息和 ...

  4. c语言abr是什么错误类型,C语言真他妈难

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /* + + + + [ >i>n[t */ #include /*2w0,1m2,]_r>i>=>(['0n1'0)1; ...

  5. java线程提高速度_如何在JAVA中减慢线程速度

    我有这个类,我在其中运行10次for循环.该类实现了Runnable接口.现在在main()中我创建了2个线程.现在两个都将循环运行到10.但我想检查每个线程的循环计数.如果t1超过7,则让它休眠1秒 ...

  6. python线程执行完后释放内存_Python中的线程终止与内存释放

    但我注意到,内存并没有释放(gc.get_objects()不断增长).实际上,这些对象是列表.dict等,而不是文件.在 有没有办法手动释放资源? 代码:import ctypes def term ...

  7. 小程序errno_错误:UNIX程序中的errno

    小程序errno UNIX®开发人员经常忽略正确的错误检测和恢复. C语言缺乏例外,而标准C库缺少基本的错误机制,无疑是造成这种情况的原因. 本文使您熟悉标准C库中的UNIX错误报告,并(希望)鼓励您 ...

  8. 同一进程中的线程究竟共享哪些资源

    线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID.       进程拥 ...

  9. python线程安全的计数器_+ =运算符在Python中是线程安全的吗?

    + =运算符在Python中是线程安全的吗? 我想为实验创建一个非线程安全的代码块,这些是2个线程将要调用的函数. c = 0 def increment(): c += 1 def decremen ...

最新文章

  1. 南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup
  2. win7计算机不支持此接口,win7系统IIS服务器启动失败显示不支持此接口的解决方法...
  3. tim指定保存云服务器_阿里云发布 Cloud Toolkit for VS Code 新版本!一键打包部署,开发提速 8 倍...
  4. Java 套接字Socket
  5. Swift里计数相关的小细节
  6. java 字符串是对象吗_解析Java中的String对象的数据类型
  7. html页面tableview,用JS写的一个TableView控件代码
  8. JAVA中 fastjson两个JSONArray叠加,合并 ,方法 addAll()
  9. 多线程爬取图片 -Java
  10. HDOJ-1232 畅通工程
  11. PHP使用Apache中的ab测试网站的压力性能及mpm介绍
  12. git常用命令让你几步摆脱图形工具提交项目
  13. 【数码复印新生态】东芝泰格强势支持统信UOS
  14. pyside6的MQTT客户端
  15. win7系统关闭蓝牙服务器,深度官方Win7旗舰版系统如何开启蓝牙功能服务
  16. python数组求和_python数组求和
  17. java计算机毕业设计基于安卓Android的禁毒宣传APP(源码+系统+mysql数据库+Lw文档)
  18. 写字机器人软件_被误解的写字机器人应该如何为自己正名?
  19. docker下载镜像新建容器打包容器打包tar加载tar
  20. 使用oschina的git服务器

热门文章

  1. java字符串数组排序_在Java中对字符串数组进行排序
  2. 卡苹果6plus在线_@哈尔滨家长:学生卡初次申办,需要到线下网点办理!
  3. centos双系统只有linux,Centos添加Windows/Centos双系统启动
  4. 圆弧半径计算图解_刀尖圆弧半径补偿G40,G41,G42 左补偿右补偿你真的能搞清楚吗...
  5. oracle 表 上限,Oracle分区表(Partition Table)的数量限制
  6. cmos和ttl_TTL电平和CMOS电平的区别
  7. 王爽 汇编语言第三版 第11章 标志寄存器
  8. c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法
  9. 现代软件工程系列 学生读后感 梦断代码 DTSlob (2)
  10. php3绕过,PHPB2B注入#3(绕过过滤)