用VC 6.0实现串行通信的三种方法


用VC 6.0实现串行通信的三种方法

中国科学院上海光学精密机械研究所(201800) 王颖

前 言

---- 在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。依据不同的条件实现对串口的灵活编程控制是我们所需要的。

----在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10秒向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收、处理、记录、显示,实时绘制曲线。串行通信程序开发环境为 VC++ 6.0。

Windows下串行通信

----与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。

----与通信设备相关的结构有COMMCONFIG、 COMMPROP、COMMTIMEOUTS、COMSTAT、DCB、MODEMDEVCAPS、 MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考 MSDN帮助文件。以下将结合实例,给出实现串行通信的三种方法。

实现串行通信的三种方法

---- 方法一:使用VC++提供的串行通信控件 MSComm

----首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project→Add to Project→Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通信驱动程序的 API 函数的接口。换句话说,只需要设置和监视MSComm控件的属性和事件。

----在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_Serial),通过该对象便可以对串口属性进行设置,MSComm 控件共有27 个属性,这里只介绍其中几个常用属性:

CommPort    设置并返回通信端口号,缺省为
            COM1。
Settings      以字符串的形式设置并返回波特
            率、奇偶校验、数据位、停止位。 
PortOpen     设置并返回通信端口的状态,也可
            以打开和关闭端口。 
Input        从接收缓冲区返回和删除字符。 
Output       向发送缓冲区写一个字符串。
InputLen     设置每次Input读入的字符个数,缺
            省值为0,表明读取接收缓冲区中的全
            部内容。
InBufferCount   返回接收缓冲区中已接收到的字符
              数,将其置0可以清除接收缓冲区。
InputMode     定义Input属性获取数据的方式(为
              0:文本方式;为1:二进制方式)。

----RThreshold 和 SThreshold 属性,表示在 OnComm 事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。

---- 以下是通过设置控件属性对串口进行初始化的实例:

   BOOL    CSampleDlg:: PortOpen()
{
   BOOL   m_Opened;
   ……
   m_Serial.SetCommPort(2);    //指定串口号
   m_Serial.SetSettings(“4800,N,8,1");
      //通信参数设置
   m_Serial.SetInBufferSize(1024); //指定接收缓冲区大小
   m_Serial.SetInBufferCount(0); //清空接收缓冲区
   m_Serial.InputMode(1);      //设置数据获取方式
   m_Serial.SetInputLen(0);     //设置读取方式
   m_Opened=m_Serail.SetPortOpen(1);
     //打开指定的串口
   return  m_Opened;
   }

---- 打开所需串口后,需要考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用 OnComm 事件和 CommEvent 属性捕捉并检查通信事件和错误的值。发生通信事件或错误时,将触发 OnComm 事件,CommEvent 属性的值将被改变,应用程序检查 CommEvent 属性值并作出相应的反应。在程序中用ClassWizard为 CMSComm控件添加OnComm消息处理函数:

void  CSampleDlg::OnComm()
{
  ……
  switch(m_Serial.GetCommEvent())
  {
     case  2:
       //  串行口数据接收,处理;
   }
}

----方法二:在单线程中实现自定义的串口通信类

----控件简单易用,但由于必须拿到对话框中使用,在一些需要在线程中实现通信的应用场合,控件的使用显得捉襟见肘。此时,若能够按不同需要定制灵活的串口通信类将弥补控件的不足,以下将介绍如何在单线程中建立自定义的通信类。

----该通信类CSimpleComm需手动加入头文件与源文件,其基类为CObject,大致建立步骤如下:

----(1) 打开串口,获取串口资源句柄

----通信程序从CreateFile处指定串口设备及相关的操作属性,再返回一个句柄,该句柄将被用于后续的通信操作,并贯穿整个通信过程。CreateFile() 函数中有几个值得注意的参数设置:串口共享方式应设为0,串口为不可共享设备;创建方式必须为OPEN_EXISTING,即打开已有的串口。对于dwFlagAndAttribute参数,对串口有意义的值是FILE_FLAG_OVERLAPPED,该标志表明串口采用异步通信模式,可进行重叠操作;若值为NULL,则为同步通信方式,在同步方式下,应用程序将始终控制程序流,直到程序结束,若遭遇通信故障等因素,将导致应用程序的永久等待,所以一般多采用异步通信。

----(2)串口设置

---- 串口打开后,其属性被设置为默认值,根据具体需要,通过调用GetCommState(hComm,&dcb)读取当前串口设备控制块DCB(Device Control Block)设置,修改后通过SetCommState(hComm,&dcb)将其写入。再需注意异步读写的超时控制设置, 通过COMMTIMEOUTS结构设置超时,调用SetCommTimeouts(hComm,& timeouts)将结果写入。以下是温度监控程序中串口初始化成员函数:

BOOL  CSimpleComm::Open( )
    {
    DCB dcb;
m_hIDComDev=CreateFile
( “COM2", GENERIC_READ | GENERIC_WRITE,0,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|
FILE_FLAG_OVE    RLAPPED, NULL );      
   //  打开串口,异步操作
    if( m_hIDComDev ==NULL)return( FALSE);
    dcb.DCBlength = sizeof( DCB );
   GetCommState( m_hIDComDev, &dcb );
      //  获得端口默认设置
   dcb.BaudRate=CBR_4800;
   dcb.ByteSize=8;
   dcb.Parity= NOPARITY;
   dcb.StopBits=(BYTE) ONESTOPBIT;
   …… }
 

----(3)串口读写操作

----主要运用ReadFile()与WriteFile()API函数,若为异步通信方式,两函数中最后一个参数为指向OVERLAPPED结构的非空指针,在读写函数返回值为FALSE的情况下,调用GetLastError()函数,返回值为ERROR_IO_PENDING,表明I/O操作悬挂,即操作转入后台继续执行。此时,可以用WaitForSingleObject()来等待结束信号并设置最长等待时间。举例如下:

    BOOL   bReadStatus;
bReadStatus = ReadFile( m_hIDComDev, buffer,
 dwBytesRead, &dwBytesRead,  &m_OverlappedRead );
    if(!bReadStatus)
   {
   if(GetLastError()==ERROR_IO_PENDING)
   {
   WaitForSingleObject(m_OverlappedRead.hEvent,1000);
   return ((int)dwBytesRead);
   }
   return(0);
   }
   return ((int)dwBytesRead);

----定义全局变量m_Serial作为新建通信类CSimpleComm的对象,通过调用类的成员函数即可实现所需串行通信功能。与方法一相比,方法二赋予串行通信程序设计较大的灵活性,端口的读写可选择较简单的查询式,或通过设置与外设数据发送时间间隔TimeCycle相同的定时器:SetTimer(1,TimeCycle,NULL),进行定时读取或发送。

     CSampleView:: OnTimer(UINT nIDEvent)
     {
       char  InputData[30];
       m_Serial.ReadData(InputData,30);
       // 数据处理
     } 

----若对端口数据的响应时间要求较严格,可采用事件驱动 I/O读写,Windows定义了9种串口通信事件,较常用的有:

EV_RXCHAR:    接收到一个字节,并放入输入
                缓冲区。
EV_TXEMPTY:   输出缓冲区中的最后一个字
                符发送出去。
EV_RXFLAG:    接收到事件字符(DCB结构中
                EvtChar成员),放入输入缓冲区。

----在用SetCommMask()指定了有用的事件后,应用程序可调用WaitCommEvent()来等待事件的发生。SetCommMask(hComm,0)可使WaitCommEvent() 中止。

---- 方法三:多线程下实现串行通信

---- 方法一、二适用于单线程通信。在很多工业控制系统中,常通过扩展串口连接多个外设,各外设发送数据的重复频率不同,要求后台实时无差错捕捉、采集、处理、记录各端口数据,这就需要在自定义的串行通信类中创建端口监视线程,以便在指定的事件发生时向相关的窗口发送通知消息。

----线程的基本概念可详见VC++参考书目,Windows内部的抢先调度程序在活动的线程之间分配CPU时间,Win 32 区分两种不同类型的线程,一种是用户界面线程UI(User Interface Thread),它包含消息循环或消息泵,用于处理接收到的消息;另一种是工作线程(Work Thread),它没有消息循环,用于执行后台任务。用于监视串口事件的线程即为工作线程。

----多线程通信类的编写在端口的配置,连接部分与单线程通信类相同,在端口配置完毕后,最重要的是根据实际情况,建立多线程之间的同步对象,如信号灯、临界区、事件等,相关细节可参考VC++ 中的同步类。

----一切就绪后即可启动工作线程:

CWinThrea *CommThread =
 AfxBeginThread(CommWatchThread,  // 线程函数名
(LPVOID) m_pTTYInfo, // 传递的参数
THREAD_PRIORITY_ABOVE_NORMAL,
  // 设置线程优先级
(UINT) 0,   //  最大堆栈大小
(DWORD) CREATE_SUSPENDED, //创建标志
(LPSECURITY_ATTRIBUTES) NULL); //安全性标志

---- 同时,在串口事件监视线程中:

if(WaitCommEvent(pTTYInfo->idComDev,
 &dwEvtMask,NULL))
    {
if((dwEvtMask  & pTTYInfo->dwEvtMask )
 == pTTYInfo->dwEvtMask)
    {
   WaitForSingleObject(pTTYInfo->hPostEvent,0xFFFFFFFF);
ResetEvent(pTTYInfo->hPostEvent);   
 // 置同步事件对象为非信号态
::PostMessage(CSampleView,ID_COM1_DATA,0,0);
 // 发送通知消息
    }
    }

----用PostMessage()向指定窗口的消息队列发送通知消息,相应地,需要在该窗口建立消息与成员函数间的映射,用ON_MESSAGE将消息与成员函数名关联。

BEGIN_MESSAGE_MAP(CSampleView, CView)
 //{{AFX_MSG_MAP(CSampleView)
ON_MESSAGE(ID_COM1_DATA, OnProcessCom1Data)  
    ON_MESSAGE(ID_COM2_DATA, OnProcessCom2Data)  
……
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

----然后在各成员函数中完成对各串口数据的接收处理,但必须保证在下一次监测到有数据到来之前,能够完成所有的中间处理工作,否则将造成数据的捕捉错误。

----多线程的实现可以使得各端口独立,准确地实现串行通信,使串口通信具有更广泛的灵活性与严格性,且充分利用了CPU时间。但在具体的实时监控系统中如何协调多个线程,线程之间以何种方式实现同步也是在多线程串行通信程序实现的难点。

结 语

----以VC++ 6.0 为工具,实现串行通信的三种方法各有利弊。

----根据不同需要,选择合适的方法,将达到事半功倍的效果。在温度监控系统中,笔者采用了方法二,在Windows 98、Windows 95 上运行稳定,取得了良好的效果。

更多相关推荐


输入法的TSF框架(Text Service Framework)简介

发布时间:2014-03-12 WINDOWS 输入法
几个关于TSF的术语TIP(TextInputProcessor),aTextserviceinTSFCicero,TSF的开发代号,所以微软内部通常称呼TSF框架为CiceroCUAS(CiceroUnawareApplicationSupport),为所有应用程序和控件提供基本的TIP支持AIMM(ActiveInputMethodManager),和CUAS一起工作输入法框架先讲一点点历史,...

Mysql日期和时间函数不求人

发布时间:2008-07-18 数据库 MYSQL SUN UNIX 2010 DATE NULL
本文出自:http://linuxdb.yeah.net作者:晏子  对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6日期和时间类型。  这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:  mysql>SELECTsomethingFROMtable  WHERETO_DAYS(NOW())-TO_DAYS(dat...

Hoops编程指南:04_3_user_interaction_window_system_interaction

发布时间:2022-11-25 EDA软件开发 QT HOOPS DRIVER WINDOWS 3DGS
与一个窗口系统交互1.与一个窗口系统交互在第3.4节中,我们介绍了如何将HOOPS/3dGS连接到本地窗口系统,以便HOOPS知道将其输出发送到何处。这还需要禁用输入处理,本章将对此进行更详细的讨论。您可以使用禁用输入驱动程序选项禁用HOOPS/3dGS输入处理。此驱动程序选项有两种变体:HC_Set_Driver_Options("disableinput");HC_Set_Driver_Opt...

用DataReader 分页与几种传统的分页方法的比较

发布时间:2008-10-09 .NET 技术 数据库 测试 存储 OBJECT SQL NULL
用DataReader分页与几种传统的分页方法的比较 作者:肖波    对于数据库的分页,目前比较传统的方法是采用分页存储过程,其实用DataReader也可以实现分页,不需要写存储过程,实现效率上也比几种比较流行的分页方法要略快。       在开始这个方法之前,让我们先创建一个简单的测试环境:    use TestGOif exists (select * from sysobjects w...

使用 GDB 调试 uCLinux 内核

发布时间:2008-01-21 DEBUGGING INCLUDE LINUX DOWNLOAD WINDOWS SIGNAL
2007-12-2509:33:44慢慢的大家的uClinux都可以跑起来了,也能够自己编译一个内核出来了。但是,如果自己要写驱动、或者修改内核的一些代码、或者像nickmit一样要自己写一个内核的移植,那么调试就是不可或缺的了。在这里我摸索了一个使用我们廉价的Wiggler+GDB+OCDLibremote来调试内核的方法。关于Wiggler和GDB在这里我就不介绍了,说一下Cygwin和OCD...

【WINDOWS / DOS 批处理】for命令详解(六)

发布时间:2022-10-19 运维 WINDOWS WINDOW MICROSOFT 服务器
 for命令详解(一)【共十篇】   for命令详解(二)【共十篇】 for命令详解(三)【共十篇】 for命令详解(四)【共十篇】 for命令详解(五)【共十篇】       for命令详解(六)【共十篇】 for命令详解(七)【共十篇】   for命令详解(八)【共十篇】  for命令详解(九)【共十篇】   for命令详解(十)【共十篇】 【格式六】     【注意】DO后面必须存在空白,即...

直接在包中创建用例

发布时间:2012-03-14 CALLBACK FILE STRING TREE ACTION NULL
packagercpdemo;importjava.io.File;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.util.List;importjava.util.Map...

用Visual C++在局域网实现IP多播

发布时间:2008-09-02 VB & VC C++ WINDOWS 平台 路由器 SOCKET SOCKETS
发信人: olivier (闷闷◎笨笨※简单生活¤徜徉爱琴海), 信区: VisualC标  题: 用Visual C++在局域网实现IP多播1(zz)发信站: 水木社区 (Wed Jan 17 05:49:56 2007), 站内【 以下文字转载自 NetPRG 讨论区 】发信人: olivier (闷闷◎笨笨※简单生活¤徜徉爱琴海), 信区: NetPRG标  题: 用Visual C++在局...

VMware和mobaXterm连接总结

发布时间:2022-10-14 笔记 运维 LINUX WINDOWS 服务器 VMWARE
今天新装了一个VMware,ping不通外网也连不上客户端,整了一上午终于整好了,总结一下方便下次看。其实本质上还是地址区段改编的区别,我将之前的111都改成新的58之后,就连得上了。1.虚拟网络编辑器 NAT模式——NAT设置 这边网关ip是192.168.58.2(这个数字非常重要)输入vi /etc/sysconfig/network-scripts/ifcfg-ens33修改网关这个是我之...

VMware安装失败 找不到msi文件

发布时间:2022-11-21 WINDOWS LINUX
感谢来自百度的le2356这个一般是安装没显示出来或卸载有残留造成的。解决办法是:下载【Windowsinstallcleanup】,安装后在开始栏可以找到(桌面不显示),从“开始”-->"程序"中打开【Windowsinstallcleanup】,选择【VMwaretools】点击【remove】删除。再重新安装【VMwaretools】重启即可。windowsinstallcleanup...

Java内存管理机制与GC

 Java是如何管理内存为了判断Java中是否有内存泄露,我们首先必须了解Java是如何管理内存的。Java的内存管理就是对象的分配和释放问题。在Java中,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间。另外,对象的释放是由GC决定和执行的。在Java中,内存的分配是由程序完成的,而内存的释放是有GC完成的,这种收支两条线的方法确实简化了...

多线程开发规范

发布时间:2022-08-17 多线程 JAVA 后端
1、不要乱用线程池,当任务调度时间与任务完成时间相差很小时,用线程池反而效率很低2、使用不可变类:String、DateTimeFormatter等被final修饰的类在多线程中不可变的对象是线程安全的3、最小化锁的作用域范围:S=1/(1-a+a/n)阿姆达尔定律在高并发程序设计中有非常重要的定律,内容太多不做赘述建议百度深入了解4、使用线程池的Executor,而不是直接newThread执行...

Eclipse中设置在创建新类时自动生成注释

发布时间:2007-03-20 ECLIPSE JAVA WINDOWS
Eclipse中设置在创建新类时自动生成注释windows-->preferenceJava-->CodeStyle-->CodeTemplatescode-->newJavafiles编辑它${filecomment}${package_declaration}/***@author作者E-mail:*@version创建时间:${date}${time}*类说明*/${...

GPRS管理与创建APN拨号连接

发布时间:2009-07-19 测试 EXCEPTION BUFFER BUTTON INTERNET NULL
   本文主要介绍一些GPRS管理与创建APN拨号连接相关的知识点。新建拨号连接利用RAS实现,本文将详细介绍我在实现创建APN拨号连接时的一些经验,目前来说创建APN连接的资源非常少,尤其是c#实现的很少。GPRS管理主要是ConnectionManagerAPI,目前的资源比较丰富,我就不重复造轮子,提供一些参考资料以供参考。     一ConnectionManagerAPI    Conn...

在对话框中选择图片

在对话框中选择图片(VC7.1)默认导入的图片ID: IDB_BITMAP1PICTURE空件ID:IDC_BNBMPEDIT控件ID:IDC_PHOTO添加OnEnChangePhoto()消息处理(可将这个属性设为隐藏)BUTTON控件ID:IDC_SELECT处理消息:OnBnClickedSeclect()定义两个变量:CDIBm_Dib,CStringm_strFileName;BOOL...

怎么安装系统

发布时间:2016-08-20 硬盘 WINDOWS WIN7 系统 XP 操作系统
电脑系统安装的方法有很多,包括光盘安装法,U盘安装法,硬盘安装法等,今天我来着重说说硬盘安装系统的方法。2首先要下载一个系统镜像,比如现在流行的windows7系统镜像或者是以前的xp系统镜像,镜像文件一般都很大,尤其是win7有两个多G,如果网速不快,下载的过程就是受煎熬的过程。系统镜像格式一般为iso格式。3下载之后,你还需要用虚拟光驱来加载,你可以在网上搜索一款虚拟光驱来完成加载操作,请根据...

多线程总结--3:怎么停止线程?线程优先级?线程守护?

发布时间:2019-08-10 多线程 JAVA
怎么停止线程?Java多线程有三种停止线程的方法:使用stop()方法强制线程退出,但是此方法会残留不完整数据,因为stop会解除线程获取的所有锁。现在已经不使用这种方法了。设置标志位,使线程正常退出,setFlag()方法;标志位:myThread.setFlag(false);这样调用,该线程就被终止了使用Thread类的interrupt()方法中断线程,但是原理也是设置标志位;interr...

MFC SetTimer用法

发布时间:2012-02-22 API MFC WINDOWS CALLBACK 重构C/C++ TIMER NULL
 MFCSetTimer用法【http://blog.csdn.net/loonghua1314/article/details/6057262】什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了。使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM...

使用Timer

发布时间:2009-10-15 MFC CALLBACK VC相关 TIMER NULL
Timer我们是经常用到的了,它的主要流程是:    SetTimer  //设置定时器    OnTimer  //Timer回调函数    KillTimer  //关闭Timer 1.SetTimer     其原型如下:          UINT_PTRSetTimer(                HWNDhWnd,//指定的窗口句柄                 UINT_PTR...

蓝屏代码

发布时间:2007-04-21 C 电脑知识 SEMAPHORE WINDOWS 资讯 通讯 作业
windows蓝屏错误对照表00x0000作业完成。10x0001不正确的函数。20x0002系统找不到指定的档案。30x0003系统找不到指定的路径。40x0004系统无法开启档案。50x0005拒绝存取。60x0006无效的代码。70x0007储存体控制区块已毁。80x0008储存体空间不足,无法处理这个指令。90x0009储存体控制区块位址无效。100x000A环境不正确。110x000B尝...

Windows API一日一练(43)WaitForSingleObject函数

发布时间:2008-06-11 QQ WINDOWS
上面已经介绍怎么样创建一个简单的线程,在那里就需要使用函数WaitForSingleObject,它是用来做什么的呢?其实它是用来实现等待线程结束的,它的机理是这样的,通知Windows操作系统,现在我进入睡眼状态,当我关注的对象条件是否满足,如果满足了就吵醒我。在那里关注的对象是线程是否退出,这是一个条件测试。如果不等待线程关闭,就去删除线程的资源,就会出错的。使用前面的线程是简单一些,但它不合...

添加用户自定义消息

发布时间:2007-08-18 VC编译错误集合 测试 框架 USER NULL
说明:以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)发送自定义消息为例,说明这两种不同方法的自定义消息的总结:消息传递的方法一:使用ON_MESSAGE使用ON_MESSAGE响应消息,必须配合定义消息#defineWM_MY_MESSAGE(WM_USER+100)对于发送消息者-MyMessageDlg,在其MyMessageDlg.h中,定义#...

多线程中使用ACE日志策略示例

发布时间:2009-10-26 OS 多线程 编程 .NET BBS
多线程中使用ACE日志策略示例2009年10月26日0.本文介绍本文通过代码,演示了如何在多线程中使用ACE日志设施(logfacilites)代码。本文分为三部分。第一部分概述了ACE日志设施代码;第二部分给出完整的源代份和运行结果;第三部分对相关代码作了说明,其中包括了运行Reactor事件,运行时动态服务加载等。1.ACE日志策略ACE_Logging_Strategy提供了一种可以在运行时...

sigprocmask理解

发布时间:2011-07-11 LINUX LINUX系统编程 REDHAT SIGNAL NULL
/*intsigprocmask(inthow,constsigset_t*set,sigset_t*oldset);功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。用法:#include<signal.h>intsigprocmask(inthow,constsigset_t*set,sigset_t*oldset);参数:how:用于指定信号修改的方式,可能选择有三种...

挑战《IT我最大》Windows 7由你秀 活动的丑恶行径

发布时间:2009-11-24 丑恶 WINDOWS
   win7简称瘟机,虽然比vista要好,不过仍旧比不上winXP,和Vista一样有着超大的系统盘空间占用,容易死机,本人安装的MSDN旗舰版,开机即死,需要硬关机再启动才能恢复.虽然官方网站介绍杀毒软件列表,但是装了卡巴斯基后,系统更是死的快,新增加了若干功能,不过大半是鸡肋,另外大半是类*nix系统的功能,除了绚丽的界面,消耗大量的资源,仍旧可以算一个鸡肋. 对于"挑战<IT我最大...

挑战《IT我最大》 Windows 7由你秀 活动的丑恶行径

发布时间:2009-11-24 丑恶 WINDOWS
   win7简称瘟机,虽然比vista要好,不过仍旧比不上winXP,和Vista一样有着超大的系统盘空间占用,容易死机,本人安装的MSDN旗舰版,开机即死,需要硬关机再启动才能恢复.虽然官方网站介绍杀毒软件列表,但是装了卡巴斯基后,系统更是死的快,新增加了若干功能,不过大半是鸡肋,另外大半是类*nix系统的功能,除了绚丽的界面,消耗大量的资源,仍旧可以算一个鸡肋. 对于"挑战<IT我最大...

Windows 7 IT我最大 活动的丑恶行径

发布时间:2009-11-24 丑恶 WINDOWS
   win7简称瘟机,虽然比vista要好,不过仍旧比不上winXP,和Vista一样有着超大的系统盘空间占用,容易死机,本人安装的MSDN旗舰版,开机即死,需要硬关机再启动才能恢复.虽然官方网站介绍杀毒软件列表,但是装了卡巴斯基后,系统更是死的快,新增加了若干功能,不过大半是鸡肋,另外大半是类*nix系统的功能,除了绚丽的界面,消耗大量的资源,仍旧可以算一个鸡肋. 对于"挑战<IT我最大...

Windows 编程[2] - 学习窗体生成的过程二

发布时间:2008-04-15 窗体 WINDOWS
曾经做过一个最简单的Windows程序:新建一个Delphi控制台程序,贴入以下代码,即可运行.programProject1;usesWindows;beginMessageBox(0,PChar('Ok!'),PChar('Title'),0);end.代码分析:系统函数MessageBox即可生成一个消息窗口;因为这个函数来自Windows单元,需要usesWindows;同样的道理,我们也...

关于C#中timer类 在C#里关于定时器类就有3个

发布时间:2011-07-29 WINFORM THREAD C# DELPHI APPLICATION TIMER
关于C#中timer类在C#里关于定时器类就有3个·关于C#中timer类 在C#里关于定时器类就有3个  1.定义在System.Windows.Forms里  2.定义在System.Threading.Timer类里  3.定义在System.Timers.Timer类里 System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类...

[图文教程]如何不买苹果电脑来体验类Unix的感觉呢?Linux装机初体验,manjaro笔记本电脑,爆改Windows笔记本

发布时间:2022-11-26 微软 LINUX WINDOWS UNIX LINUX基础 虚拟机
原系统:win1021H1Windows10家庭中文版原系统类型:64位操作系统,基于x64的处理器处理器:Intel®Core™i3-8145UCPU@2.10GHz2.30GHzRAM:8.00GB打算安装系统:manjaroLinux版主玩过多款国内外的Linux了,包括:Ubuntu、Ubuntu一些定制版、centsOS、uos、deepin等等想整点不一样的系统。也安装过winxp、7...

mysql

windows下的mysql启动,停止netstart服务名netstop服务名例如:netstartmysqlnetstopmysql登录认证mysql-hIP-Pport-uuser-p针对的操作对象,分成不同的语言1、数据管理语言DML2、数据定义语言(对保存数据的格式进行定义)DDL3、数据库管理语言(针对数据库服务软件)DCLa、按照指定模式查询表showtableslike['patt...

WCF服务应用程序的创建和使用

发布时间:2022-11-25 MICROSOFT WINDOWS
1.创建WCF服务应用程序:https://blog.csdn.net/weixin_44690047/article/details/119087706usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Runtime.Serialization;usingSystem.ServiceModel;usi...

解决VS2008 开发Wince应用程序项目生成速度慢的问题

发布时间:2012-05-12 WINDOWS WINCE C# MOBILE .NET 任务 程序调试
最近用VS2008开发WindowsMobile程序,使用C#、.NETCompactFramework,发现项目生成速度比较慢。用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长,编译速度巨慢,最慢达到5分钟之久,实在无法忍受。 决定找出VS2008生成时,做了什么花费时间的工作。从工具à选项进入“选项”对话框选择“MSBuild项目生成输出详细信息”为“诊断”这样编译时,会输出具...

中国代码恒熠百度小偷V1.0之网页搜索

演示见http://baidu.china-code.net/作品来源:在做浙搜www.zhesou.com这个项目中,老板要求在三天内做好获取百度的网页内容和mp3的内容.花了一个晚上基本上把这个任务完成。做这个搜索的关键是编码和正则表达式。下面主要说web.aspx.cs stringstr1,Result;   stringwd=System.Web.HttpUtility.UrlEncod...

关于Dreamweaver乱码问题的解决方案

发布时间:2004-11-04 C C++ WINDOWS C# DREAMWEAVER
原作者:南宫彩虹出处:5D多媒体出现乱码,大致为两种情况:  一是没有标明主页制作所用的文字,这种情况下很简单就可以解决,在<HEAD>区加上<METAhttp-equiv=Content-Typecontent="text/html;charset=gb2312">即可。  二是你新加装了字体,诸如文鼎酷字体之类。这样的话,你每次新建一张网页,都要调整一次,非常麻烦。那么...

IT领域自负CEO排行榜出炉

发布时间:2009-06-15 微软 SAAS WINDOWS JOBS 产品 SALESFORCE 业界新闻
据国外媒体报道,英国科技网站Vnunet日前评出了IT市场的10大“自负CEO”,微软创始人比尔·盖茨,CEO史蒂夫·鲍尔默,苹果CEO史蒂夫·乔布斯,甲骨文CEO拉里·埃里森,雅虎前任CEO杨致远和现任CEO卡罗尔·巴茨等全部上榜。1.史蒂夫·乔布斯(SteveJobs)—苹果CEO从iPod到iPhone,甚至是一部电视广告,几乎每一款苹果产品上都留下了乔布斯的印记。对于一家企业的控制达到如此...

常见面试题——死锁

发布时间:2021-03-10 多线程
转载自https://blog.csdn.net/hd12370/article/details/82814348什么是死锁?所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。如下图...

实现多用户读/单用户写同步

发布时间:2014-03-28 多线程
ResourceData.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceProcessTest{///<summary>///单例模式///</summary>publicclassResourceData{privatestaticreado...

DirectDraw与Windows协作

发布时间:2012-07-17 DIRECTX WINDOWS 游戏
视频显示设备协作级别:                  全屏模式:整个屏幕表面都分配给了你的游戏,并且你是直接写到视频设备里,没有其他的应用程序能接触到这种设备。/什么直接写到视频设备里????                  窗口模式:DirectDraw需更多的与Windows协作,因为其他的应用程序可能需要更新他们各自的客户窗口区域。因此,窗口模式下你对于视频设备的控制和垄断      ...

springboot 集成 vue

发布时间:2020-03-22 NODEJS LINUX WINDOWS PYTHON JAVA
eclipse 部署好springboot环境,能成功运行。 部署过程见我的其他博客,这里就不过多说。  2. https://www.runoob.com/vue2/vue-install.html  3.下载node.js  下载地址:https://nodejs.org/zh-cn/  (或者https://nodejs.org/en/download/) 右上角有中文切换。   我下载了1...

win10系统重置后设置、浏览器什么都打不开,出现了文件系统错误-2147219196的解决思路

发布时间:2022-10-29 BUG 运维 WINDOWS WINDOWS系统 系统安全
这是我之前写的一个分享帖子以下原文:说到这个问题,前几天的我也是哭的。由于那一天做了一些小事情,导致我将电脑重置了,于是重置后的电脑便出现了一个令人头疼的问题。桌面上只剩下了回收站和edge浏览器(这个正常),但是当我打开浏览器,却发现打不开,设置也打不开,打开一些地方还出现了文件系统错误-2147219196。 我感觉这是windows10系统的一个通病,因为我也发现了很多和我一样问题的同学。但...

安装ZoneAlarm防火墙

发布时间:2008-03-16 C C++ WINDOWS C# 防火墙
安装ZoneAlarm防火墙(即eTrustPersonalFirewall5.5.114官方中文版)时,所需序列号:LGYTR-G5UKR-XH8LH-ROCXC或LMLTK-XT5RC-XHVML-ROE4W。    将简体中文版eTrustPersonalFirewall,变成ZoneAlarmPro5.5.114官方简体中文版的方法——    安装eTrustPersonalFirewal...