随笔-3  评论-2  文章-0  trackbacks-0
  2007年4月16日
今天看了天极网的"ASP.NET底层架构探索",感觉不错。自己也打算对他所讲的做个整理,以方便理解。
参考:http://soft.yesky.com/lesson/62/2612562.shtml
posted @ 2007-04-16 16:12 风网 阅读(120) | 评论 (0)编辑 收藏

        理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环。在多线程程序设计时,我们首先要了解进程和线程的基本概念及它们之间的关系。
         进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。进程是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
         线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
         线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。每个进程具有独立的地址空间,而该进程内的所有线程共享该地址空间。
        常用的进程间通信(IPC)机制有:(1)剪贴板(Clip Board);(2)动态数据交换(Dynamic Data Exchange);(3)组件对象模型(Component Object Model);(4)文件映射(File Mapping);(5)邮件槽(Mail Slots);(6)管道(Pipes);(7)Win32套接字(Socket);(8)远程过程调用(Remote Procedure Call);(9)WM_COPYDATA消息(WM_COPYDATA Message)。
         WIN32靠线程的优先级(达到抢占式多任务的目的)及分配给线程的CPU时间来调度线程。多线程调度的机制为:
 1)运行一个线程,直到被中断或线程必须等待到某个资源可用;
 2)保存当前执行线程的描述表(上下文);
 3)装入下一执行线程的描述表(上下文);
 4)若存在等待被执行的线程,则重复上述过程。
         WIN32核心对象包括进程、线程、文件、事件、信号量、互斥体和管道,核心对象可能有不只一个拥有者,甚至可以跨进程。WIN32线程控制主要实现线程的创建、终止、挂起和恢复等操作,这些操作都依赖于WIN32提供的一组API和具体编译器的C运行时库函数。线程之间通信的两个基本问题是互斥和同步。在WIN32中,同步机制主要有以下几种:(1)事件(Event);(2)信号量(semaphore);(3)互斥量(mutex);(4)临界区(Critical section)。

posted @ 2007-04-16 12:46 风网 阅读(209) | 评论 (0)编辑 收藏
最近在看《windows程序设计》这本书,但是在菜单及其他资源这章中有个例子不能正常模拟。
这个例子是关于如何使用自定义资源的。但我是在visual c++.net 2003中模拟的。
我是这么添加TEXT自定义资源的.

在资源视图的test2.rc单击右键,然后选择导入,选择了一个文本文件.然后再输入TEXT作为它的类型.
打开后,可看到文件有载入.打开该资源的二进制代码,它的左侧却有00000000等.这应该是内存地址吧?!难道这时就有地址?或则是相对地址?
我选取test2.cpp中的部分代码:
hResource =LoadResource(hInst,        
                                       FindResource (hInst,MAKEINTRESOURCE("IDR_TEXT"),        
                                       TEXT ("TEXT"))) ;                      
pText = (char *)LockResource(hResource);        
iNumLines = 0 ;                       
while (*pText != '\\' && *pText != '\0')
{      
   if (*pText == '\n')       
        iNumLines ++ ;
        
   pText = AnsiNext (pText) ;
}
 *pText = '\0' ;
编译时会出现如下错误:
test2.exe 中的 0x00412100 处未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突 。
观察程序中pText指针的值是0x00000000.

麻烦哪位兄弟帮忙解决?或则告诉我另外添加自定义资源的方法,谢谢
posted @ 2007-04-16 08:09 风网 阅读(406) | 评论 (2)编辑 收藏
仅列出标题