有名信号量:可以用于不同进程间或多线程间的互斥与同步
创建打开有名信号量
sem_t *sem_open(const char *name, int oflag)
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value)
成功返回信号量指针;失败返回SEM_FAILED,设置errnoname是文件路径名,但不能写成/tmp/a.sem这样的形式,因为在linux下,sem都是在/dev/shm目录下,可写成"/mysem"或"mysem",创建出来的文件都 是"/dev/shm/sem.mysem",mode设置为0666,value设置为信号量的初始值.所需信号灯等已存在条件下指定O_CREAT|O_EXCL却是个错误。
关闭信号量,进程终止时,会自动调用它
int sem_close(sem_t *sem)
成功返回0;失败返回-1,设置errno
删除信号量,立即删除信号量名字,当其他进程都关闭它时,销毁它
int sem_unlink(const char *name)
等待信号量,测试信号量的值,如果其值小于或等于0,那么就等待(阻塞);一旦其值变为大于0就将它减1,并返回
int sem_wait(sem_t *sem)
int sem_trywait(sem_t *sem)
成功返回0;失败返回-1,设置errno
当信号量的值为0时,sem_trywait立即返回,设置errno为EAGAIN。如果被某个信号中断,sem_wait会过早地返回,设置errno为EINTR
发出信号量,给它的值加1,然后唤醒正在等待该信号量的进程或线程
int sem_post(sem_t *sem)
成功返回0;失败返回-1,不会改变它的值,设置errno,该函数是异步信号安全的,可以在信号处理程序里调用它无名信号量,用于进程体内各线程间的互斥和同步,使用如下API(无名信号量,基于内存的信号量)
(1)、sem_init
功能:用于创建一个信号量,并初始化信号量的值。
头文件:
函数原型: int sem_init (sem_t* sem, int pshared, unsigned int value)
函数传入值: sem:信号量。pshared:决定信号量能否在几个进程间共享。由于目前LINUX还没有实现进程间共享信息量,所以这个值只能取0。
(2)其他函数。
int sem_wait (sem_t* sem)
int sem_trywait (sem_t* sem)
int sem_post (sem_t* sem)
int sem_getvalue (sem_t* sem)
int sem_destroy (sem_t* sem)
功能:sem_wait和sem_trywait相当于P操作,它们都能将信号量的值减一,两者的区别在于若信号量的值小于零时,sem_wait将会阻塞进程,而sem_trywait则会立即返回。sem_post相当于V操作,它将信号量的值加一,同时发出唤醒的信号给等待的进程(或线程)。
sem_getvalue 得到信号量的值。
sem_destroy 摧毁信号量。
如果某个基于内存的信号灯是在不同进程间同步的,该信号灯必须存放在共享内存区中,这要只要该共享内存区存在,该信号灯就存在。
互斥锁(又名互斥量)强调的是资源的访问互斥:互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”
也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。而线程互斥量则是“锁住某一资源”的概念,在锁定期间内,其他线程无法对被保护的数据进行操作。在有些情况下两者可以互换。
在linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:
对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init.
对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化, 并且在释放内存(free)前需要调用pthread_mutex_destroy.
原型:
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restric attr)
int pthread_mutex_destroy(pthread_mutex_t *mutex)
头文件:
返回值: 成功则返回0, 出错则返回错误编号.
说明: 如果使用默认的属性初始化互斥量, 只需把attr设为NULL. 其他值在以后讲解.
首先说一下加锁函数:
头文件:
int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_trylock(pthread_mutex_t *mutex)
返回值: 成功则返回0, 出错则返回错误编号.
说 明: 具体说一下trylock函数, 这个函数是非阻塞调用模式, 也就是说, 如果互斥量没被锁住, trylock函数将把互斥量加锁, 并获得对共享资源的访问权限如果互斥量 被锁住了, trylock函数将不会阻塞等待而直接返回EBUSY, 表示共享资源处于忙状态.
再说一下解所函数:
头文件:
原型: int pthread_mutex_unlock(pthread_mutex_t *mutex)
返回值: 成功则返回0, 出错则返回错误编号.
条件变量常与互斥锁同时使用,达到线程同步的目的:条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足。在发 送信号时,如果没有线程 等待在该条件变量上,那么信号将丢失;而信号量有计数值,每次信号量post操作都会被记录
1. 互斥锁必须是谁上锁就由谁来解锁,而信号量的wait和post操作不必由同一个线程执行。
2. 互斥锁要么被锁住,要么被解开,和二值信号量类似
3. sem_post是各种同步技巧中,唯一一个能在信号处理程序中安全调用的函数
4. 互斥锁是为上锁而优化的;条件变量是为等待而优化的; 信号量既可用于上锁,也可用于等待,因此会有更多的开销和更高的复杂性
5. 互斥锁,条件变量都只用于同一个进程的各线程间,而信号量(有名信号量)可用于不同进程间的同步。当信号量用于进程间同步时,要求信号量建立在共享内存区。
6. 信号量有计数值,每次信号量post操作都会被记录,而条件变量在发送信号时,如果没有线程在等待该条件变量,那么信号将丢失。
读写锁
读写锁与互斥量类似,不过读写锁允许更高的并行性。互斥量要么是锁住状态要么是不加锁状态,而且一次只有一个线程可以对其加锁。
读写锁可以由三种状态:读模式下加锁状态、写模式下加锁状态、不加锁状态。一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写
锁。
在读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞。当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是如果线程希望以写模式对此锁进行加锁,它必须阻塞直到所有的线程释放读锁。虽然读写锁的实现各不相同,但当读写锁处于读模式锁住状态时,如果有另外的线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁请求。这样可以避免读模式锁长期占用,而等待的写模式锁请求一直得不到满足。
读写锁非常适合于对数据结构读的次数远大于写的情况。当读写锁在写模式下时,它所保护的数据结构就可以被安全地修改,因为当前只有一个线程可以在写模式下拥 有这个锁。当读写锁在读状态下时,只要线程获取了读模式下的读写锁,该锁所保护的数据结构可以被多个获得读模式锁的线程读取。
读写锁也叫做共享-独占锁,当读写锁以读模式锁住时,它是以共享模式锁住的;当他以写模式锁住时,它是以独占模式锁住的。
初始化和销毁:
#include
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr)
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock)
成功则返回0, 出错则返回错误编号.
同互斥量以上, 在释放读写锁占用的内存之前, 需要先通过thread_rwlock_destroy对读写锁进行清理工作, 释放由init分配的资源.
读和写:
#include
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock)
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock)
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock)
成功则返回0, 出错则返回错误编号.
这3个函数分别实现获取读锁, 获取写锁和释放锁的操作. 获取锁的两个函数是阻塞操作, 同样, 非阻塞的函数为:
#include
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock)
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock)
成功则返回0, 出错则返回错误编号.
非阻塞的获取锁操作, 如果可以获取则返回0, 否则返回错误的EBUSY.
虽然读写锁提高了并行性,但是就速度而言并不比互斥量快.
可能这也是即使有读写锁存在还会使用互斥量的原因,因为他在速度方面略胜一筹。这就需要我们在写程序的时候综合考虑速度和并行性并找到一个折中。
比如: 假设使用互斥量需要0.5秒,使用读写锁需要0.8秒。在类似学生管理系统这类软件中,可能百分之九十的时间都是查询操作,那么假如现在突然来个个20个请求,如果使用的是互斥量,那么最后的那个查询请求被满足需要10后。这样,估计没人能受得了。而使用读写锁,应为 读锁能够多次获得。所以所有的20个请求,每个请求都能在1秒左右得到满足。
也就是说,在一些写操作比较多或是本身需要同步的地方并不多的程序中我们应该使用互斥量,而在读操作远大于写操作的一些程序中我们应该使用读写锁来进行同步
条件变量(condition)
条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。
条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其它线程在获得互斥量之前不会察觉到这种改变,因此必须锁定互斥量以后才能计算条件。
条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件
变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。如果两进程共享可读写的内存,条件变量可以被用来实现这两进程间的线程同步。
1. 初始化:
条件变量采用的数据类型是pthread_cond_t, 在使用之前必须要进行初始化, 这包括两种方式:
静态: 可以把常量PTHREAD_COND_INITIALIZER给静态分配的条件变量.
动态: pthread_cond_init函数, 是释放动态条件变量的内存空间之前, 要用pthread_cond_destroy对其进行清理.
#include
int pthread_cond_init(pthread_cond_t *restrict cond, pthread_condattr_t *restrict attr)
int pthread_cond_destroy(pthread_cond_t *cond)
成功则返回0, 出错则返回错误编号.
注意:条件变量占用的空间并未被释放。
当pthread_cond_init的attr参数为NULL时, 会创建一个默认属性的条件变量非默认情况以后讨论.
2. 等待条件:
#include
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restric mutex)
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict timeout)
成功则返回0, 出错则返回错误编号.
这两个函数分别是阻塞等待和超时等待.
等待条件函数等待条件变为真, 传递给pthread_cond_wait的互斥量对条件进行保护, 调用者把锁住的互斥量传递给函数. 函数把调用线程放到等待条件的线程列表上, 然后对互斥量解锁, 这两个操作是原子的. 这样 便关闭了条件检查和线程进入休眠状态等待条件改变这两个操作之间的时间通道, 这样线程就不会错过条件的任何变化.
当pthread_cond_wait返回时, 互斥量再次被锁住.
pthread_cond_wait函数的返回并不意味着条件的值一定发生了变化,必须重新检查条件的值。
pthread_cond_wait函数返回时,相应的互斥锁将被当前线程锁定,即使是函数出错返回。
阻塞在条件变量上的线程被唤醒以后,直到pthread_cond_wait()函数返回之前条件的值都有可能发生变化。所以函数返回以后,在锁定相应的互斥锁之前,必须重新测试条 件值。最好的测试方法是循环调用pthread_cond_wait函数,并把满足条件的表达式置为循环的终止条件。如:
pthread_mutex_lock()
while (condition_is_false)
pthread_cond_wait()
pthread_mutex_unlock()
阻塞在同一个条件变量上的不同线程被释放的次序是不一定的。
注意:pthread_cond_wait()函数是退出点,如果在调用这个函数时,已有一个挂起的退出请求,且线程允许退出,这个线程将被终止并开始执行善后处理函数,而这时和条 件变量相关的互斥锁仍将处在锁定状态。
pthread_cond_timedwait函数到了一定的时间,即使条件未发生也会解除阻塞。这个时间由参数abstime指定。函数返回时,相应的互斥锁往往是锁定的,即使是函数出错返回。
注意:pthread_cond_timedwait函数也是退出点。
超时时间参数是指一天中的某个时刻。使用举例:
pthread_timestruc_t to
to.tv_sec = time(NULL) + TIMEOUT
to.tv_nsec = 0
超时返回的错误码是ETIMEDOUT。
3. 通知条件:
#include
int pthread_cond_signal(pthread_cond_t *cond)
int pthread_cond_broadcast(pthread_cond_t *cond)
成功则返回0, 出错则返回错误编号.
这两个函数用于通知线程条件已经满足. 调用这两个函数, 也称向线程或条件发送信号. 必须注意, 一定要在改变条件状态以后再给线程发送信号.
你的程序中的错误不是由end造成的,forend的用法就是这样用问题出在你的x(i)和y(i)的赋值是有问题的,A,B,C,D都是向量,而你x(i)=2*atan((A+sqrt(A(i)^2+B(i)^2-C(i)^2))/(B(i)-C(i)))中把一个向量A和A(i)做运算这肯定是不对的,程序我给你改好了,你测试一下,有问题再讨论
y1=60y2=200y3=120y4=150
x1=linspace(0,2*pi,50)
A=2*y1*y2*sin(x1)
B=2*y2*(y1*cos(x1)-y4)
C=y1^2+y2^2+y4^2-2*y1*y4*cos(x1)-y3^2
D=2*y1*y3*sin(x1)
E=2*y3*(y1*cos(x1)-y4)
F=y2^2-y1^2-y3^2-y4^2+2*y1*y4*cos(x1)
for
i=1:50
x(i)=2*atan((A(i)+sqrt(A(i)^2+B(i)^2-C(i)^2))/(B(i)-C(i)))
y(i)=2*atan((D(i)+sqrt(D(i)^2+E(i)^2-F(i)^2))/(B(i)-C(i)))
subplot(1,
2,
1)
plot([x1(i),x(i)])
subplot(1,
2,
2)
plot([x1(i),y(i)])
end
1 0×00000001 不正确的函数。2 0×00000002 系统找不到指定的档案。
3 0×00000003 系统找不到指定的路径。
4 0×00000004 系统无法开启档案。
5 0×00000005 拒绝存取。
6 0×00000006 无效的代码。
7 0×00000007 储存体控制区块已毁。
8 0×00000008 储存体空间不足,无法处理这个指令。
9 0×00000009 储存体控制区块地址无效。
10 0×0000000A 环境不正确。
11 0×0000000B 尝试加载一个格式错误的程序。
12 0×0000000C 存取码错误。
13 0×0000000D 资料错误。
14 0×0000000E 储存体空间不够,无法完成这项作业。
15 0×0000000F 系统找不到指定的磁盘驱动器。
16 0×00000010 无法移除目录。
17 0×00000011 系统无法将档案移到其它的磁盘驱动器。
18 0×00000012 没有任何档案。
19 0×00000013 储存媒体为写保护状态。
20 0×00000014 系统找不到指定的装置。
21 0×00000015 装置尚未就绪。
22 0×00000016 装置无法识别指令。
23 0×00000017 资料错误 (cyclic redundancy check)
24 0×00000018 程序发出一个长度错误的指令。
25 0×00000019 磁盘驱动器在磁盘找不到 持定的扇区或磁道。
26 0×0000001A 指定的磁盘或磁盘无法存取。
27 0×0000001B 磁盘驱动器找不到要求的扇区。
28 0×0000001C 打印机没有纸。
29 0×0000001D 系统无法将资料写入指定的磁盘驱动器。
30 0×0000001E 系统无法读取指定的装置。
31 0×0000001F 连接到系统的某个装置没有作用。
32 0×00000020 The process cannot access the file because it is being used by another process.
33 0×00000021 档案的一部份被锁定,现在无法存取。
34 0×00000022 磁盘驱动器的磁盘不正确。请将%2 (Volume Serial Number: %3) 插入磁盘机%1。
36 0×00000024 开启的分享档案数量太多。
38 0×00000026 到达档案结尾。
39 0×00000027 磁盘已满。
50 0×00000032 不支持这种网络要求。
51 0×00000033 远程计算机无法使用。
52 0×00000034 网络名称重复。
53 0×00000035 网络路径找不到。
54 0×00000036 网络忙碌中。
55 0×00000037 The specified network resource or device is no longer available.
56 0×00000038 The network BIOS command limit has been reached.
57 0×00000039 网络配接卡发生问题。
58 0×0000003A 指定的服务器无法执行要求的作业。
59 0×0000003B 网络发生意外错误。
60 0×0000003C 远程配接卡不兼容。
61 0×0000003D 打印机队列已满。
62 0×0000003E 服务器的空间无法储存等候打印的档案。
63 0×0000003F 等候打印的档案已经删除。
64 0×00000040 指定的网络名称无法使用。
65 0×00000041 拒绝存取网络。
66 0×00000042 网络资源类型错误。
67 0×00000043 网络名称找不到。
68 0×00000044 超过区域计算机网络配接卡的名称限制。
69 0×00000045 超过网络 BIOS 作业阶段的限制。
70 0×00000046 远程服务器已经暂停或者正在起始中。
71 0×00000047 由于联机数目已达上限,此时无法再联机到这台远程计算机。
72 0×00000048 指定的打印机或磁盘装置已经暂停作用。
80 0×00000050 档案已经存在。
82 0×00000052 无法建立目录或档案。
83 0×00000053 INT 24 失败
84 0×00000054 处理这项要求的储存体无法使用。
85 0×00000055 近端装置名称已经在使用中。
86 0×00000056 指定的网络密码错误。
87 0×00000057 参数错误。
88 0×00000058 网络发生资料写入错误。
89 0×00000059 此时系统无法执行其它行程。
100 0×00000064 无法建立其它的系统 semaphore。
101 0×00000065 属于其它行程专用的 semaphore。
102 0×00000066 semaphore 已经设定,而且无法关闭。
103 0×00000067 无法指定 semaphore 。
104 0×00000068 在岔断时间无法要求专用的 semaphore 。
105 0×00000069 此 semaphore 先前的拥有权已经结束。
106 0×0000006A 请将磁盘插入 %1。
107 0×0000006B 因为代用的磁盘尚未插入,所以程序已经停止。
108 0×0000006C 磁盘正在使用中或被锁定。
109 0×0000006D Pipe 已经中止。
110 0×0000006E 系统无法开启指定的 装置或档案。
111 0×0000006F 档名太长。
112 0×00000070 磁盘空间不足。
113 0×00000071 没有可用的内部档案标识符。
114 0×00000072 目标内部档案标识符不正确。
117 0×00000075 由应用程序所执行的 IOCTL 呼叫不正确。
118 0×00000076 写入验证参数值不正确。
119 0×00000077 系统不支持所要求的指令。
120 0×00000078 此项功能仅在 Win32 模式有效。
121 0×00000079 semaphore 超过逾时期间。
122 0×0000007A 传到系统呼叫的资料区域太小。
123 0×0000007B 文件名、目录名称或储存体卷标语法错误。
124 0×0000007C 系统呼叫层次不正确。
125 0×0000007D 磁盘没有设定卷标。
126 0×0000007E 找不到指定的模块。
127 0×0000007F 找不到指定的程序。
128 0×00000080 没有子行程可供等待。
129 0×00000081 %1 这个应用程序无法在 Win32 模式下执行。
130 0×00000082 Attempt to use a file handle toan open disk partition for an operation other than raw disk I/O.
131 0×00000083 尝试将档案指针移至档案开头之前。
132 0×00000084 无法在指定的装置或档案,设定档案指针。
133 0×00000085 JOIN 或 SUBST 指令 无法用于 内含事先结合过的磁盘驱动器。
134 0×00000086 尝试在已经结合的磁盘驱动器,使用 JOIN 或 SUBST 指令。
135 0×00000087 尝试在已经替换的磁盘驱动器,使用 JOIN 或 SUBST 指令。
136 0×00000088 系统尝试删除 未连结过的磁盘驱动器的连结关系。
137 0×00000089 系统尝试删除 未替换过的磁盘驱动器的替换关系。
138 0×0000008A 系统尝试将磁盘驱动器结合到已经结合过之磁盘驱动器的目录。
139 0×0000008B 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。
140 0×0000008C 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。
141 0×0000008D 系统尝试将磁盘驱动器 SUBST 成已结合的磁盘驱动器 目录。
142 0×0000008E 系统此刻无法执行 JOIN 或 SUBST。
143 0×0000008F 系统无法将磁盘驱动器结合或替换同一磁盘驱动器下目录。
144 0×00000090 这个目录不是根目录的子目录。
145 0×00000091 目录仍有资料。
146 0×00000092 指定的路径已经被替换过。
147 0×00000093 资源不足,无法处理这项指令。
148 0×00000094 指定的路径这时候无法使用。
149 0×00000095 尝试要结合或替换的磁盘驱动器目录,是已经替换过的的目标。
150 0×00000096 CONFIG.SYS 文件未指定系统追踪信息,或是追踪功能被取消。
151 0×00000097 指定的 semaphore事件 DosMuxSemWait 数目不正确。
152 0×00000098 DosMuxSemWait 没有执行;设定太多的 semaphore。
153 0×00000099 DosMuxSemWait 清单不正确。
154 0×0000009A 您所输入的储存媒体标 元长度限制。
155 0×0000009B 无法建立其它的执行绪。
156 0×0000009C 接收行程拒绝接受信号。
157 0×0000009D 区段已经被舍弃,无法被锁定。
158 0×0000009E 区段已经解除锁定。
159 0×0000009F 执行绪识别码的地址不正确。
160 0×000000A0 传到 DosExecPgm 的自变量字符串不正确。
161 0×000000A1 指定的路径不正确。
162 0×000000A2 信号等候处理。
164 0×000000A4 系统无法建立执行绪。
167 0×000000A7 无法锁定档案的部份范围。
170 0×000000AA 所要求的资源正在使用中。
173 0×000000AD 取消范围的锁定要求不明显。
174 0×000000AE 档案系统不支持自动变更锁定类型。
180 0×000000B4 系统发现不正确的区段号码。
182 0×000000B6 操作系统无法执行 %1。
183 0×000000B7 档案已存在,无法建立同一档案。
186 0×000000BA 传送的旗号错误。
187 0×000000BB 指定的系统旗号找不到。
188 0×000000BC 操作系统无法执行 %1。
189 0×000000BD 操作系统无法执行 %1。
190 0×000000BE 操作系统无法执行 %1。
191 0×000000BF 无法在 Win32 模式下执行 %1。
192 0×000000C0 操作系统无法执行 %1。
193 0×000000C1 %1 不是正确的 Win32 应用程序。
194 0×000000C2 操作系统无法执行 %1。
195 0×000000C3 操作系统无法执行 %1。
196 0×000000C4 操作系统无法执行 这个应用程序。
197 0×000000C5 操作系统目前无法执行 这个应用程序。
198 0×000000C6 操作系统无法执行 %1。
199 0×000000C7 操作系统无法执行 这个应用程序。
200 0×000000C8 程序代码的区段不可以大于或等于64KB。
201 0×000000C9 操作系统无法执行 %1。
202 0×000000CA 操作系统无法执行 %1。
203 0×000000CB 系统找不到输入的环境选项。\r
205 0×000000CD 在指令子目录下,没有任行程有信号副处理程序。
206 0×000000CE 文件名称或扩展名太长。
207 0×000000CF ring 2 堆栈使用中。
208 0×000000D0 输入的通用档名字元 * 或 ? 不正确,或指定太多的通用档名字元。
209 0×000000D1 所传送的信号不正确。
210 0×000000D2 无法设定信号处理程序。
212 0×000000D4 区段被锁定,而且无法重新配置。
214 0×000000D6 附加到此程序或动态连结模块的动态连结模块太多。
215 0×000000D7 Can’t nest calls to LoadModule.
230 0×000000E6 The pipe state is invalid.
231 0×000000E7 所有的 pipe instances 都在忙碌中。
232 0×000000E8 The pipe is being closed.
233 0×000000E9 No process is on the other end of the pipe.
234 0×000000EA 有更多可用的资料。
240 0×000000F0 作业阶段被取消。
254 0×000000FE 指定的延伸属性名称无效。
255 0×000000FF 延伸的属性不一致。
259 0×00000103 没有可用的资料。
266 0×0000010A 无法使用 Copy API。
267 0×0000010B 目录名称错误。
275 0×00000113 延伸属性不适用于缓冲区。
276 0×00000114 在外挂的档案系统上的延伸属性档案已经毁损。
277 0×00000115 延伸属性表格文件满。
278 0×00000116 指定的延伸属性代码无效。
282 0×0000011A 外挂的这个档案系统不支持延伸属性。
288 0×00000120 意图释放不属于叫用者的 mutex。
298 0×0000012A semaphore 传送次数过多。
299 0×0000012B 只完成 Read/WriteProcessMemory 的部份要求。
317 0×0000013D 系统找不到位于讯息文件 %2 中编号为 0×0000%1 的讯息。
487 0×000001E7 尝试存取无效的地址。
534 0×00000216 运算结果超过 32 位。
535 0×00000217 信道的另一端有一个行程在接送资料。
536 0×00000218 等候行程来开启信道的另一端。
994 0×000003E2 存取延伸的属性被拒。
995 0×000003E3 由于执行绪结束或应用程序要求,而异常终止 I/O 作业。
996 0×000003E4 重叠的 I/O 事件不是设定成通知状态。
997 0×000003E5 正在处理重叠的 I/O 作业。
998 0×000003E6 对内存位置的无效存取。
999 0×000003E7 执行 inpage 作业发生错误。
1001 0×000003E9 递归太深,堆栈满溢。
1002 0×000003EA 窗口无法用来传送讯息。
1003 0×000003EB 无法完成这项功能。
1004 0×000003EC 旗号无效
1005 0×000003ED 储存媒体未含任何可辨识的档案系统。请确定以加载所需的系统驱动程序,而且该储存媒体并未毁损。
1006 0×000003EE 储存该档案的外部媒体发出警告,表示该已开启档案已经无效。
1007 0×000003EF 所要求的作业无法在全屏幕模式下执行。
1008 0×000003F0 An attempt was made to reference a token that does not exist.
1009 0×000003F1 组态系统登录数据库毁损。
1010 0×000003F2 组态系统登录机码无效。
1011 0×000003F3 无法开启组态系统登录机码。
1012 0×000003F4 无法读取组态系统登录机码。
1013 0×000003F5 无法写入组态系统登录机码。
1014 0×000003F6 系统登录数据库中的一个档案必须使用记录或其它备份还原。已经还原成功。
1015 0×000003F7 系统登录毁损。其中某个档案毁损、或者该档案的系统映对内存内容毁损、或是档案无法复原。
1016 0×000003F8 系统登录起始的 I/O 作业发生无法复原的错误。系统登录无法读入、写出或更新,其中的一个档案内含系统登录在内存中的内容。
1017 0×000003F9 系统尝试将档案加载系统登录或将档案还原到系统登录中,但是,指定档案的格式不是系统登录文件的格式。
1018 0×000003FA 尝试在标示为删除的系统登录机码,执行不合法的操作。
1019 0×000003FB 系统无法配置系统登录记录所需的空间。
1020 0×000003FC 无法在已经有子机码或数值的系统登录机码建立符号连结。
1021 0×000003FD 无法在临时机码下建立永久的子机码。
1022 0×000003FE 变更要求的通知完成,但信息并未透过呼叫者的缓冲区传回。呼叫者现在需要自行列举档案,找出变更的地方。
1051 0×0000041B 停止控制已经传送给其它服务所依峙的一个服务。
1052 0×0000041C 要求的控制对此服务无效。
1053 0×0000041D The service did not respond to the start or control request in a timely fashion.
1054 0×0000041E 无法建立服务的执行绪。
1055 0×0000041F 服务数据库被锁定。
1056 0×00000420 这种服务已经在执行。
1057 0×00000421 帐户名称错误或者不存在。
1058 0×00000422 指定的服务暂停作用,无激活。
1059 0×00000423 指定循环服务从属关系。
1060 0×00000424 指定的服务不是安装进来的服务。
1061 0×00000425 该服务项目此时无法接收控制讯息。
1062 0×00000426 服务尚未激活。
1063 0×00000427 无法联机到服务控制程序。
1064 0×00000428 处理控制要求时,发生意外状况。
1065 0×00000429 指定的数据库不存在。
1066 0×0000042A 服务传回专属于服务的错误码。
1067 0×0000042B The process terminated unexpectedly.
1068 0×0000042C 从属服务或群组无法激活。
1069 0×0000042D 因为登入失败,所以没有激活服务。
1070 0×0000042E 在激活之后,服务在激活状态时当机。
1071 0×0000042F 指定服务数据库锁定无效。
1072 0×00000430 指定的服务已经标示为删除。
1073 0×00000431 指定的服务已经存在。
1074 0×00000432 系统目前正以上一次执行成功的组态执行。
1075 0×00000433 从属服务不存在,或已经标示为删除。
1076 0×00000434 目前的激活已经接受上一次执行成功的控制设定。
1077 0×00000435 上一次激活之后,就没有再激活服务。
1078 0×00000436 指定的名称已经用于服务名称或服务显示名称。
1100 0×0000044C 已经到了磁带的最后。
1101 0×0000044D 到了档案标示。
1102 0×0000044E 遇到磁带的开头或分割区。
1103 0×0000044F 到了档案组的结尾。
1104 0×00000450 磁带没有任何资料。
1105 0×00000451 磁带无法制作分割区。
1106 0×00000452 存取多重容体的新磁带时,发现目前区块大小错误。
1107 0×00000453 加载磁带时,找不到磁带分割区信息。
1108 0×00000454 无法锁住储存媒体退带功能。
1109 0×00000455 无法解除加载储存媒体。
1110 0×00000456 磁盘驱动器中的储存媒体已经变更。
1111 0×00000457 已经重设 I/O 总线。
1112 0×00000458 磁盘驱动器没有任何储存媒体。
1113 0×00000459 目标 multi-byte code page,没有对应 Unicode 字符。
1114 0×0000045A 动态链接库(DLL)起始例程失败。
1115 0×0000045B 系统正在关机。
1116 0×0000045C 无法中止系统关机,因为没有关机的动作在进行中。
1117 0×0000045D 因为 I/O 装置发生错误,所以无法执行要求。
1118 0×0000045E 序列装置起始失败,会取消加载序列驱动程序。
1119 0×0000045F 无法开启装置。这个装置与其它装置共享岔断要求(IRQ)。至少已经有一个使用同一IRQ的其它装置已经开启。
1120 0×00000460 A serial I/O operation was completed by another write to the serial port. (The IOCTL_SERIAL_XOFF_COUNTER reached zero.)
1121 0×00000461 因为已经过了逾时时间,所以序列 I/O 作业完成。(IOCTL_SERIAL_XOFF_COUNTER 不是零。)
1122 0×00000462 在磁盘找不到任何的 ID 地址标示。
1123 0×00000463 磁盘扇区 ID 字段与磁盘控制卡追踪地址不符。
1124 0×00000464 软式磁盘驱动器控制卡回报了一个软式磁盘驱动器驱动程序无法识别的错误。
1125 0×00000465 软式磁盘驱动器控制卡传回与缓存器中不一致的结果。
1126 0×00000466 存取硬盘失败,重试后也无法作业。
1127 0×00000467 存取硬盘失败,重试后也无法作业。
1128 0×00000468 存取硬盘时,必须重设磁盘控制卡,但是连重设的动作也失败。
1129 0×00000469 到了磁带的最后。
1130 0×0000046A 可用服务器储存空间不足,无法处理这项指令。
1131 0×0000046B 发现潜在的死锁条件。
1132 0×0000046C 指定的基本地址或档案位移没有适当 对齐。
1140 0×00000474 尝试变更系统电源状态,但其它的应用程序或驱动程序拒绝。
1141 0×00000475 系统 BIOS 无法变更系统电源状态。
1150 0×0000047E 指定的程序需要新的 Windows 版本。
1151 0×0000047F 指定的程序不是 Windows 或 MS-DOS 程序。
1152 0×00000480 指定的程序已经激活,无法再激活一次。
1153 0×00000481 指定的程序是为旧版的 Windows 所写的。
1154 0×00000482 执行此应用程序所需的链接库档案之一毁损。
1155 0×00000483 没有应用程序与此项作业的指定档案建立关联。
1156 0×00000484 传送指令到应用程序发生错误。
1157 0×00000485 找不到执行此应用程序所需的链接库档案。
1200 0×000004B0 指定的装置名称无效。
1201 0×000004B1 装置现在虽然未联机,但是它是一个记忆联机。
1202 0×000004B2 尝试记忆已经记住的装置。
1203 0×000004B3 提供的网络路径找不到任何网络提供程序。
1204 0×000004B4 指定的网络提供程序名称错误。
1205 0×000004B5 无法开启网络联机设定文件。
1206 0×000004B6 网络联机设定文件坏掉。
1207 0×000004B7 无法列举非容器。
1208 0×000004B8 发生延伸的错误。
1209 0×000004B9 指定的群组名称错误。
1210 0×000004BA 指定的计算机名称错误。
1211 0×000004BB 指定的事件名称错误。
1212 0×000004BC 指定的网络名称错误。
1213 0×000004BD 指定的服务名称错误。
1214 0×000004BE 指定的网络名称错误。
1215 0×000004BF 指定的资源共享名称错误。
1216 0×000004C0 指定的密码错误。
1217 0×000004C1 指定的讯息名称错误。
1218 0×000004C2 指定的讯息目的地错误。
1219 0×000004C3 所提供的条件与现有的条件组发生冲突。
1220 0×000004C4 尝试与网络服务器联机,但是与该服务器的联机已经太多。
1221 0×000004C5 其它网络计算机已经在使用这个工作群组或网域名称。
1222 0×000004C6 网络没有显示出来或者没有激活。
1223 0×000004C7 使用者已经取消作业。
1224 0×000004C8 要求的作业无法在已经开启使用者对应区段的档案执行。
1225 0×000004C9 远程系统拒绝网络联机。
1225 0×000004C9 远程系统拒绝网络联机。
1226 0×000004CA 关闭网络联机。
1227 0×000004CB 网络传输端点已经有相关连的地址。
1228 0×000004CC 地址尚未有相关的网络端点。
1229 0×000004CD 尝试在不存在的网络连线作业。
1230 0×000004CE 在作用中的网络联机上执行无效的作业。
1231 0×000004CF 无法传输到远程网络。
1232 0×000004D0 无法联机到远程系统。
1233 0×000004D1 远程系统不支持传输通讯协议。
1234 0×000004D2 远程系统的目的地网络端点没有作何执行中的服务。
1235 0×000004D3 要求已经中止。
1236 0×000004D4 进端系统已经中断网络联机。
1237 0×000004D5 无法完成作业,请重试。
1238 0×000004D6 无法与服务器联机,原因是这个帐户已经到达同时联机数目的上限。
1239 0×000004D7 尝试在这个帐户未授权的时间登入网络。
1240 0×000004D8 这个帐户无法从这个地方登入网络。
1241 0×000004D9 网络地址无法用于这个要求的作业。
1242 0×000004DA 服务已经登记。
1243 0×000004DB 指定的服务不存在。
1244 0×000004DC 作业无法执行,原因是使用者尚未授权使用。
1245 0×000004DD 要求的作业无法执行,原因是使用者尚未登入网络。指定的服务不存在。
1246 0×000004DE 传回要求呼叫者继续工作的讯息。
1247 0×000004DF 在完成起始作业之后,尝试再执行起始作业。
1248 0×000004E0 没有其它的近端装置。
1300 0×00000514 并未指定所有的参照权限给呼叫者。
1301 0×00000515 帐户名称与安全识别码之间尚有未执行完成的联机。
1302 0×00000516 此帐户并未设定特别的系统配额限制。
1303 0×00000517 没有可用的加密机码。传回一个已知的加密机码。
1304 0×00000518 NT 密码太复杂,无法转换成 LAN Manager 密码。传回的LAN Manager密码是一个空字符串。
1305 0×00000519 修正层次不详。
1306 0×0000051A 表示两个修订阶层不兼容。
1307 0×0000051B 此安全识别码无法指定为这个对象的拥有者。
1308 0×0000051C 此安全识别码无法指定为主要的对象群组。
1309 0×0000051D An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client.
1310 0×0000051E 不可以关闭群组。
1311 0×0000051F 目前没有可登入的服务器,所以无法处理登入要求。
1312 0×00000520 指定登入作业阶段不存在。该作业阶段可能已经 结束。
1313 0×00000521 指定的权限不存在。
1314 0×00000522 客户端未列出要求的权限。
1315 0×00000523 所提供的名称格式与帐户名称不符。
1316 0×00000524 指定的使用者已经存在。
1317 0×00000525 指定的使用者不存在。
1318 0×00000526 指定的群组已经存在。
1319 0×00000527 指定的群组不存存。
1320 0×00000528 指定的使用者帐户已经是指定群组的成员,或指定的群组因为内含成员而无法删除。
1321 0×00000529 指定的使用者帐户不是指定的群组帐户成员。
1322 0×0000052A 上一次留下来的管理帐户无法关闭或删除。
1323 0×0000052B 无法更新密码。所输入的密码不正确。
1324 0×0000052C 无法更新密码。所输入的新密码内含不符合密码规定。
1325 0×0000052D 因为违反密码更新规则,所以无法更新密码。
1326 0×0000052E 登入失败: 无法辨识的使用者名称或密码错误。
1327 0×0000052F 登入失败: 使用者帐户限制。
1328 0×00000530 登入失败: 违反帐户登入时间限制。
1329 0×00000531 登入失败: 使用者不可登入这部计算机。
1330 0×00000532 登入失败: 指定的帐户密码过期。
1331 0×00000533 登入失败: 帐户目前无效。
1332 0×00000534 帐户名称与帐户识别码不符。
1333 0×00000535 一次要求太多的近端使用者识别码 (local user identifiers,LUIDs)。
1334 0×00000536 没有可用的近端使用者识别码 (local user identifiers ,LUIDs)。
1335 0×00000537 安全识别码的转授权部份对这个特殊用法无效。
1336 0×00000538 无效的存取控制清单结构。
1337 0×00000539 安全识别码结构无效。
1338 0×0000053A 安全叙述子结构无效。
1340 0×0000053C 无法建立继承的存取控制清单或存取控件目。
1341 0×0000053D 服务器目前无效。
1342 0×0000053E 服务器目前可以使用。
1343 0×0000053F 所提供的值是无效的识别码授权值。
1344 0×00000540 没有可供安全信息更新使用的内存。
1345 0×00000541 指定的属性无效,或指定的属性与整个群
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)