Tirion

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  27 随笔 :: 0 文章 :: 62 评论 :: 4 引用

2006年5月15日 #

Autodesk CADC BSD 部门招聘英才,现有职位:
Software Engineer
Quality Assurance Engineer
Project Manager
Product Designer
Content Developer

为方便以下各地区应征者应聘并加快招聘速度, 我公司招聘经理分别将到以下地区进行宣讲,招聘及当场笔试:

成都:
5月19日:电子科技大学
5月20日:所有通过51job的应聘者

西安:
5月21日:所有通过51job的应聘者
5月22日:西安交大

北京:
5月27日:北京建国门外大街1号国贸大厦2座2911-2915

所有通过笔试者,我公司将尽快通知应征者并安排来上海进行面试。

详情请见51Job:
http://companyads.51job.com/companyads/shanghai/sh/autodesk_060509/index.htm

posted @ 2006-05-15 09:25 Findekano 阅读(563) 评论(0) 编辑

2005年2月21日 #

C#异步调用是个好东西,省却无数麻烦。然而最近发现如果被异步调用的方法内有时间被触发,并且异步调用结束回调函数中执行序列化操作的时候就会出现结束回调函数被反复调用两次的情况。具体代码如下(从MSDN实例代码中修改而来)
using System;
using System.Threading; 
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Remoting.Messaging;

namespace test
{
    [Serializable]
    
public class AsyncDemo 
    
{
        
public delegate void TestRaiseEventHandler(object sender, EventArgs e);
        
public event TestRaiseEventHandler TestRaise;
        
protected virtual void OnTestRaiseEventHandler()
        
{
            
if (TestRaise != null)
            
{
                TestRaise(
thisnull);
            }

        }

        
// 将被异步调用的方法
        
//
        public string TestMethod(int callDuration, out int threadId) 
        
{
            Console.WriteLine(
"Test method begins.");
            OnTestRaiseEventHandler();
            Thread.Sleep(callDuration);
            threadId 
= AppDomain.GetCurrentThreadId();
            
return "MyCallTime was " + callDuration.ToString();
        }


        
// 序列化操作
        public void Serialize(string filename)
        
{
            Serialize(filename, 
this);
        }


        
public static void Serialize(string filename, AsyncDemo async) 
        

            FileStream fs 
= new FileStream(filename, FileMode.Create); 
            BinaryFormatter formatter 
= new BinaryFormatter(); 
            
try
            
{
                formatter.Serialize(fs, async);
            }

            
finally
            
{
                fs.Close(); 
            }

        }
 
    }


    
// 用来执行异步调用的代理
    public delegate string AsyncDelegate(int callDuration, out int threadId);

    
public class AsyncMain 
    
{
        
private static int threadId;

        
static void Main(string[] args) 
        
{
            
// 创建测试类
            AsyncDemo ad = new AsyncDemo();
            
// 添加事件.(1)
            ad.TestRaise += new test.AsyncDemo.TestRaiseEventHandler((new AsyncMain()).ad_TestRaise);
            
// 创建异步方法的代理
            AsyncDelegate dlgt = new AsyncDelegate(ad.TestMethod);
   
            
// 开始执行异步调用
            IAsyncResult ar = dlgt.BeginInvoke(1000,
                
out threadId, 
                
new AsyncCallback(CallbackMethod),
                ad );

            
// 等待调用完成
            Console.WriteLine("Press Enter to close application.");
            Console.ReadLine();        
        }


        
// 事件响应函数
        void ad_TestRaise(object sender, EventArgs e)
        
{
            Console.WriteLine(
"delegate call");
        }


        
// 异步调用完成时的回调函数
        static void CallbackMethod(IAsyncResult ar) 
        
{
            
// 得到异步方法的代理
            AsyncDelegate dlgt = (AsyncDelegate) (ar as AsyncResult).AsyncDelegate;        
            Console.WriteLine(
"begin EndInvoke");
            
string ret = dlgt.EndInvoke(out threadId, ar);
            Console.WriteLine(
"The call executed on thread {0}, with return value \"{1}\".", threadId, ret);

            
// 执行序列化操作(2)
            AsyncDemo demo = ar.AsyncState as AsyncDemo;
            demo.Serialize(
"Test.dat");
        }

    }

}



上述代码输出如下:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Press Enter to close application.
Test method begins.
delegate call
begin EndInvoke
The call executed on thread 3736, with return value "MyCallTime was 1000".
begin EndInvoke
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
如上代码可见,当同时具备两个条件时:
(1)异步方法中有事件发生并被客户代码响应,
(2)异步操作结束时执行序列化操作
CallbackMethod方法将被执行两次,且序列化操作不能正常完成,第二次执行的时候终止于EndInvoke语句。
在网络上查询似乎并没有关于这个问题的描述,不知道是否有人遇到过相似的问题?
posted @ 2005-02-21 02:01 Findekano 阅读(1657) 评论(3) 编辑

2005年2月12日 #

public class GrandPa
{
    
protected const int age = 100;
    
public void DoSth(){}
}

public class Father
{
    
private const new int age = 75;
    
public void DoSth(){}
}

public class Son
{
    
public void DoSth()int i = age; }
}
此时Son.DoSth()中i会等于多少呢?VS.NET调试期监视显示为75,但是事实上是100。
下午写代码的时候不小心把Father.age写成了private,结果总是造成Son.DoSth数组运算越界,调试察看又没有问题,百思不得其解,这个问题也算是隐藏的相当晦暗了。
posted @ 2005-02-12 17:26 Findekano 阅读(901) 评论(2) 编辑

2004年12月18日 #

      看着师兄找工作,不由得也开始有些紧迫感了。加上一直觉得自己涉猎的技术领域很广,基础却不慎扎实。于是最近开始看一些比较经典的书籍,这些书籍大多比较“过时”了,有些书以前看过,却已印象模糊了。我一直相信技术是需要踏踏实实的积累,循序渐进,由底而上。如果不了解Win32 SDK,不了解Windows内存管理机制,进程、线程模型,不了解COM技术,一上来就猛攻.NET,我想效果不会尽如人意。
      现在开始看一些比较古老的东西,好处在于可以少走弯路。这些书籍都是经受大浪淘沙而沉淀下来的精华之作,不至于会出现像初见一门新技术,于书店面对满目琳琅却无可选,甚或误择庸书,于迷谷间徘徊数回仍不得要领的境地。
《Windows核心编程》 0% <<|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--->>100%
《COM原理与应用》 0% <<|||||||||||||||||||||||||------------------------------------------>>100%
《COM本质论》 0% <<||||||||||||||||||||---------------------------------------------->>100%
《Win32多线程程序设计》 0% <<||||||||||||||--------------------------------------------------->>100%
《深度探索C++对象模型》 0% <<|||||||||||||||||||||||||||||---------------------------------------->>100%
       
posted @ 2004-12-18 16:31 Findekano 阅读(620) 评论(1) 编辑

2004年11月15日 #

自从安装了VS.NET 2K5,写什么试验性质的小程序就都在新版的IDE中进行了。高度智能化的IDE真的能够大大提高开发效率,只是也大大促进了程序员的“懒惰”习性,赫赫。最近写了一个多线程的脚本记录和分析工具,其中的文本解析和储存是基于C++ STL的容器和std::string类别。2k5 IDE对STL容器调试期内容求值的支持(见VS.NET2005使用体验(一) ) 使得调试工作轻松多了。^_^。

这次对VS.NET 2k5 IDE的改进,首先是C#的自动完成功能。在C#工程中,一边输入,IDE会很智能的把你可能想要输入的内容显示在候选框内,比2k3进步的是,现在连关键字也可以自动完成了,输入abs,就会自动出现abstract候选,代码书写速度提高很多呢。

此外,如果一个类的父类有虚方法或者此类实现了一个接口,将光标放在父类或接口的名称上,使用快捷键Ctrl+Alt+F10可以直接插入这些虚方法的实现框架:


顺便也看了一下传说中的WhiteHorse,在C#工程上的快捷菜单上选择"View in Diagram"就可以对这个工程自动进行逆向工程,并给出类图,文件的扩展名为.cd(class diagram?),类图的外观确实是美轮美奂,能够把UML图作的这么花哨的也就只有微软了。只是在工具栏里面找了好久不知道怎么绘制依赖关系...汗。而且也不知道如何绘制其他类型的UML图。感觉上WhiteHorse还并不是一个完整的建模工具。
posted @ 2004-11-15 01:52 Findekano 阅读(1994) 评论(6) 编辑

2004年11月8日 #

摘要: Tip from Andrew Troelsen | Posted by: Duncan Mackenzie, MSDN | Translated by Findekano说明:文章源自C# FAQ,翻译此文仅为个人爱好,如有错误敬请指点 在非托管世界,截取Win32消息进行处理得情况非常常见,Win32消息被用户应用程序截取就如同在消息队列中被弹出一般。然而在托管WIndows For...阅读全文
posted @ 2004-11-08 11:21 Findekano 阅读(1033) 评论(0) 编辑

2004年11月7日 #

摘要:       一直以来很习惯用Win+R打开"Run..."对话框,然后输入命令来打开要使用的程序,如winword,如wmplayer....然而很多程序安装好之后并不能在Run...中简单输入程序名来打开,于是原来一直手动编辑注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windo...阅读全文
posted @ 2004-11-07 12:56 Findekano 阅读(964) 评论(1) 编辑

2004年11月5日 #

摘要: 安装了VS.NET2005,一边看书一边用VC++ 8.0些一些测试代码,顺便在这里记录一些IDE新的改进记录界面就不说了,截图到处都是,只说几个比较贴心的功能改进。首先是改动记录提示:可以看到,打开文件之后,改动过的部分左边会出现黄色提示,打开之后改动并保存的部分为绿色提示,原有代码前面没有提示。对调试期变量监视增强了很多,请看下面图片:图1图2图3可以看见,对std::string类型,调试器...阅读全文
posted @ 2004-11-05 00:20 Findekano 阅读(2057) 评论(0) 编辑

2004年8月16日 #

摘要: 最近在做一些MFC & OpenGL的行当,找了一些资料,顺手把连接整理一下,以备后用 a collection of opengl app with mfchttp://www.mfcogl.com/ Generating Random Fractal Terrain :http://www.gameprogrammer.com/fractal.html Starting OpenGL ...阅读全文
posted @ 2004-08-16 15:18 Findekano 阅读(4173) 评论(3) 编辑

2004年7月9日 #

摘要: 考试终于结束,暑假已经到来。今天下午终于完成了Raytracing渲染,有些高兴。从这个星期一开始就一直在实验室干活了,从早到晚。最新鲜的是用到了个人平生碰到的最牛的机器:HP Workstation x4000。Xeon 2G x 4, 2G RAM, 3DLabs的WildCatIII显卡以及专业的19寸显示器。舒服的没话说了。今天下午实现的Raytracing渲染器的效果图,感觉还不错:VS...阅读全文
posted @ 2004-07-09 19:19 Findekano 阅读(631) 评论(1) 编辑