2004年12月24日

 

配置Win2003的终端服务,使用Win2003的远程桌面

办公室有两台电脑,A17″液晶显示器,B15″CRT显示器,在使用远程桌面后,就可以只使用17″液晶了,感觉很爽。但为了达到这一目的,还是遇到了一些“坎坷”。

基本设置网上都有了,就不说了。远程的机器必须启动终端服务并允许远程连接。首先是访问远程桌面的工具,我先使用的是管理工具中的远程桌面,结果找不到如何设置成全屏的办法,上网一搜发现附件中通讯菜单下有个远程桌面连接,搞定。

在远程桌面连接中设定将远程计算机的音频带入本地计算机,并在远程计算机中安装了声卡驱动,结果怎么也听不到声音,MediaPlayer一播放就提示声卡出错,而且声音的播放设备始终是Microsoft RDP 音频驱动程序,不是我安装的声卡驱动程序(CMI8738)。这个RDP迷惑了我,实际上它是“远程桌面协议”的意思,这个驱动程序就是远程桌面的声音驱动程序。我的声卡驱动安装是没有问题的,明白这一点时我已反复安装了N遍。

其实不能播放声音的原因是远程计算机的终端服务设置中禁用了音频映射。在终端服务配置程序中打开对应连接的属性对话框,在客户端设置选项卡中清除禁用音频映射的设置就好了。

安装SQLServer2005 Express B2

由于安装的.NetFramework2.0B1不正确,因此安装SSX时报错。之前使用的是同事在BT上下载的VS Express B1版本,Express工具一套,但里面的.NetFramework2.0B1版本的BuildNo不是MS网站上的B1版本。

换成MS网站上的B1版本后安装成功。

2004年12月17日

正在做一个小程序,可以将一些资料通过邮件上传到邮箱保存。现在163sina等都有1G以上的免费邮箱,这个程序也可以测试一下真实的容量。
使用
Windows CDO控件(如System.Web.Mail.SMTPMail)发送邮件时,如果使用Win2000SMTP服务,系统缓冲及出错文件在\INETPUB\MailRoot中。

CDO出现Exception时,信息很简单,但通过该异常的InnerException.InnerException.Message可以得到更多有用的信息。我就是通过查看这些信息,了解了程序出错的真正原因:SMTP服务器要求发送验证。

加入异步发信功能。

使用Delegate.BeginInvoke。这是由CompilerCLR实现的函数,调用时如果传入引用参数,必须保证该引用参数在函数调用期间未被其它线程改变。我的办法是每次传入的都是新创建的引用对象。

这种实现方法使用消息队列的方式,由CLR在线程池中分配线程执行特定函数。

在非UI线程需要访问UI时,使Control.Invoke/BeginInvoke。这相当于往UI线程的队列中插入一条消息,指定的函数将在UI线程的Context中执行。

让我好奇的是ThreadPool到底是如何运作的,当我在队列中放入N条消息时,真的会有N个线程来执行吗?于是我想在异步任务中加入显示当前线程ID的语句,经过一翻搜索,System.Diagnostics.Process.GetCurrentProcess.Threads属性,返回当前进程的所有线程。通过遍历所有线程,查到到ThreadStateRunning的线程并显示它的ID

通过加入多个任务发现,在任务非常短时(为方便测试,去除耗时的任务)多个任务由同一个线程执行,当任务耗时较长时,多个任务各由一个线程执行,当然我的机器只有一个CPU,多CPU环境的情况也许并不一样。

下面研究主线程如何知道队列中任务均已处理完毕,这样就可以避免任务未处理完就关闭程序。

通过ThreadPoolGetMaxThreads方法及GetAailableThreads可以得到最大线程数及可用线程数,当可用数等于最大数时,队列中应该就是空的。但我不知道CLR本身是否也使用这个ThreadPool做些什么,比如GC之类的操作。ThreadPool在一个进程中只有一个,当代码中访问ThreadPool类时创建ThreadPoolThreadPool所有成员均为静态成员,可以想象ThreadPool类有一个静态构造函数。

实际执行时可以看到每启用一个新线程ID,可用线程数就少一个。默认最大WorkThread25个,CompletionPortThread1000个。

如何访问异步队列,现在仍是个迷。

在我查找关于异步队列的过程中发现了这篇文章:

Programming the Thread Pool in the .NET Framework

 

源文档 <http://msdn.microsoft.com/library/en-us/dndotnet/html/progthrepool.asp?frame=true>

虽然没有解决如何了解异步队列状态的问题,但对于我之前的做法是一种印证。

 

2004年12月02日

今天看到这篇文章:最畅销企业员工培训读本揭秘,谈的是《没有任何借口》这本书的来历。


    我们公司也人手发了一本。拿到手我就上网搜了一下,作者找不到,Amazon也找不到这本书,所有相关的网页都是中文的,当时我就觉得有问题。


   Amazon有同名的书,但不是这本。


    信息时代,也是信息泛滥的时代,滥竽充数的机会更多了。我不评价这本书本身内容的好坏,只是这种欺骗的行为值得我们警醒,在你获得信息的同时,最好搞清它的来源。书本是知识的来源,但在这个是人就可以出书的时代,书本是不能盲从的。


    这个时代,有时让人相信非常容易,虚假宣传,造神运动,全国范围不行,可以全省范围搞,全省不行,可以全市范围搞,这个神可以是保健品,可以是药品,可以是一个人,可以是一本书。


    白天的一些时段打开收音机,每个台都在做药品或保健品宣传,还不断有人打进电话,在询问的同时顺带证明了它的疗效。没买的人听着心动,谁身体没点问题?买过的人感觉良好,把这么多钱一下子吃下去,能没有疗效吗?当然在刚开始推产品的时候,少不了几个“药引子”,也就是“托儿”。


    大家都相信科学,但什么是科学什么不科学,有时连院士们都争论不休,老百姓怎么判断呢?当然是靠最近的信息来源影响了,朋友、亲戚、熟人的言传身教,还有“免费”的保健讲座。退休了可不能闲着,身体最重要,讲座又“免费”。在把老人说服后,回家把听来的话重复一遍,哪个儿女不支持呢?从父母嘴里说出的话还有假?


    好在有互联网,我们的视野扩大了不少。有一次我把听来的药名用Google一搜,第一条就是它在山东某地搞非法讲座被查处。


    人有时候要有点主见,我们要对自己的身体负责,也要对自己的思想负责。