EditPlus是什么东东
EditPlus 是一款功能强大的文字处理软件。它可以充分的替换记事本,它也提供网页作家及程序设计师许多强悍的功能。支持 HTML、CSS、PHP、ASP、Perl、C/C++、Java、JavaScript、VBScript 等多种语法的着色显示。程序内嵌网页浏览器,其它功能还包含 FTP 功能、HTML 编辑、URL 突显、自动完成、剪贴文本、行列选择、强大的搜索与替换、多重撤销/重做、拼写检查、自定义快捷键,等等... 更新说明: ------------------------------------------------------ ① 压缩包的备份目录并不会安装,你可以删除他们,减小安装包大小,readme.txt 为我收集和编写的软件的中文技巧,你可自行替换为备份目录中的 readme.txt。 ② 汉化了关于对话框,注册对话框等几处等一直没有解决的英文资源,感谢世纪论坛的高手 SomeBody。 ③ 用回了软件的安装程序,稍做修改,使得可以定制自己的安装,同时也附带了原来的Inno setup 安装脚本供参考。 ④ 另附『EditPlus 2.12 使用技巧集萃-2005.08.10整理』见备份目录的技巧.txt。 ⑤ 默认是Tahoma的字体,推荐Win2000以上系统使用。如果是98/ME系统请用 WinRar打开安装包,释放备份目录中的宋体汉化程序,然后拖放添加到安装压缩包。 ⑥ 修改了安装和卸载程序,使其可以复制几个涉及EditPlus自定义设置的有用文件名 setting.ini 和 editplus.ini,自定义时复制程序目录的 Editplus.ini 以及 Setting.ini 到压缩包中,导出注册表内容,放在压缩包根目录里面(参考备份目录中的y.reg),并去掉 “;setup=regedit /s y.reg”前面的分号。如不需要,可替换回备份目录中的同名执行程序。注册表位置 HKEY_CURRENT_USER\SOFTWARE\ES-Computing\EditPlus 2
Shell_TrayWnd
你是不是玩WOW 或者别的游戏 去你的游戏文件夹里找个 后面是Ipk.dll的文件 删掉 这个是盗号的病毒 ,不过看你情况挺严重的估计这个文件你也找不到, 先把金山急救箱修复了 或者重新装 别把急救箱放在桌面上 在别的地方开 用急救箱可以杀这个病毒
ManualResetEvent和AutoResetEvent的区别
C#中的AutoResetEvent和ManualResetEvent用于实现线程同步。其基本工作原理是多个线程持有同一个XXXResetEvent,在这个XXXResetEvent未被set前,各线程都在WaitOne()除挂起;在这个XXXResetEvent被set后,所有被挂起的线程中有一个(AutoResetEvent的情况下)或全部(ManualResetEvent的情况下)恢复执行。AutoResetEvent与ManualResetEvent的差别在于某个线程在WaitOne()被挂起后重新获得执行权时,是否自动reset这个事件(Event),前者是自动reset的,后者不是。所以从这个角度上也可以解释上段提到的“在这个XXXResetEvent被set后,所有被挂起的线程中有一个(AutoResetEvent的情况下)或全部(ManualResetEvent的情况下)恢复执行”——因为前者一旦被某个线程获取后,立即自动reset这个事件(Event),所以其他持有前者的线程之后WaitOne()时又被挂起;而后者被某个获取后,不会自动reset这个事件(Event),所以后续持有后者的线程在WaitOne()时不会被挂起。namespace AutoResetEvent_Examples {class MyMainClass {/** 构造方法的参数设置成false后,表示创建一个没有被set的AutoResetEvent* 这就导致所有持有这个AutoResetEvent的线程都会在WaitOne()处挂起* 此时如果挂起的线程数比较多,那么你看一下自己的内存使用量……。* 如果将参数设置成true,表示创建一个被set的AutoResetEvent* 持有这个AutoResetEvent的线程们会竞争这个Event* 此时,在其他条件满足的情况下* 至少会有一个线程得到执行* 而不是因得不到Event而导致所有线程都得不到执行*/static AutoResetEvent myResetEvent = new AutoResetEvent(false);static int _Count = 0;static void Main() {Thread myThread = null;for(int i = 0;i 《 100;i++) {myThread = new Thread(new ThreadStart(MyThreadProc));myThread.Name = “Thread“ + i;myThread.Start();}myResetEvent.Set();Console.Read();}static void MyThreadProc() {myResetEvent.WaitOne();_Count++;Console.WriteLine(“In thread:{0},label={1}.“,Thread.CurrentThread.Name,_Count);myResetEvent.Set();}} } namespace ManualResetEvent_Examples {class MyMainClass {/** 构造方法的参数设置成false后,表示创建一个没有被set的ManualResetEvent* 这就导致所有持有这个ManualResetEvent的线程都会在WaitOne()处挂起* 此时如果挂起的线程数比较多,那么你看一下自己的内存使用量……。* 如果将参数设置成true,表示创建一个被set的ManualResetEvent* 持有这个ManualResetEvent的线程们在其他条件满足的情况下* 会同时得到执行(注意,是同时得到执行!所以本例中的_Count的结果一般是不正确的^_^)* 而不是因得不到Event而导致所有线程都得不到执行*/static ManualResetEvent myResetEvent = new ManualResetEvent(false);static int _Count = 0;static void Main() {Thread myThread = null;for(int i = 0;i 《 1000;i++) {myThread = new Thread(new ThreadStart(MyThreadProc));myThread.Name = “Thread“ + i;myThread.Start();}myResetEvent.Set();Console.Read();}static void MyThreadProc() {myResetEvent.WaitOne();_Count++;/** 在new ManualResetEvent(false);的情况下* 下面的输出结果可能比较诡异:多个线程都输出label=1000!* 一种可能的原因是多个线程在各自执行到_Count++后,被挂起* 随后打印的_Count值就不是本线程中刚刚修改过的_Count值了。*/Console.WriteLine(“In thread:{0},_Count={1}.“,Thread.CurrentThread.Name,_Count);}} } set是让事件(Event)发生,而reset是让事件(Event)复位或者说忽略已经的事件(Event)。WaitOne是等待事件(Event)的发生,之后继续向下执行,否则一直等待。在构造AutoResetEvent和ManualResetEvent的时候,它们的构造方法里需要一个参数initState,中文版MSDN(2005和2008)上的解释是“若要将初始状态设置为终止,则为 true;若要将初始状态设置为非终止,则为false。”,我看了一个下午,没弄明白,而看一下英文版后大概就明白了“A value that you set totrueto set the initial state of the specified event to signaled. Set this value tofalseto set the initial state of the event to nonsignaled.”(参见:另外稍微提一下,我在做多线程测试的时候,发现在线程数少的情况下,即使多个线程不做任何同步,如果对一个公共变量进行非互斥式修改时,不会至少很难出现不一致的情况,比如开100个线程,这个线程不做任何同步就分别给一个公共变量执行加1操作,那么结果在绝绝绝大部分的情况下是100!所以,我最后就下了狠心,把线程数增加到1000个,这个时候才出现问题,但问题也不是想象得那么严重——结果在991-1000之间!再有,MSDN上对Monitor的Wait和Pulse两个方法用法的举例会导致死锁,一种死锁的执行顺序是:1、线程tSecond在SecondThread()中执行到while(Monitor.Wait(m_smplQueue,1000))后,释放m_smplQueue的锁,线程tSecond挂起;2、线程tFirst在FirstThread()中执行到Monitor.Wait(m_smplQueue)之前耗费的时间超过1000毫秒,此时线程tSecond退出,线程tFirst挂起,并且从此以后不会被恢复!可以使用如下改动过的代码验证:public void FirstThread() {int counter = 0;lock(m_smplQueue) {Console.WriteLine(“11“);while(counter 《 MAX_LOOP_TIME) {//Wait, if the queue is busy.Console.WriteLine(“12“);Monitor.Wait(m_smplQueue);Console.WriteLine(“13“);//Push one element.m_smplQueue.Enqueue(counter);Console.WriteLine(“14“);//Release the waiting thread.Monitor.Pulse(m_smplQueue);Console.WriteLine(“15“);counter++;Console.WriteLine(“16“);}}}public void SecondThread() {lock(m_smplQueue) {Console.WriteLine(“21“);//Release the waiting thread.Monitor.Pulse(m_smplQueue);Console.WriteLine(“22“);//Wait in the loop, while the queue is busy.//Exit on the time-out when the first thread stops.while(Monitor.Wait(m_smplQueue,1000)) {Console.WriteLine(“23“);//Pop the first element.int counter = (int) m_smplQueue.Dequeue();Console.WriteLine(“24“);//Print the first element.Console.WriteLine(counter.ToString());Console.WriteLine(“25“);//Release the waiting thread.Monitor.Pulse(m_smplQueue);Console.WriteLine(“26“);}Console.WriteLine(“27“);}}