解决多线程中11个常见问题

解决多线程中11个常见问题
解决多线程中11个常见问题

并发危险

解决多线程代码中的11 个常见的问题

Joe Duffy

本文将介绍以下内容:?基本并发概念

?并发问题和抑制措施

?实现安全性的模式?横切概念本文使用了以下技术:

多线程、.NET Framework

目录

数据争用

忘记同步

粒度错误

读写撕裂

无锁定重新排序

重新进入

死锁

锁保护

戳记

两步舞曲

优先级反转

实现安全性的模式

不变性

纯度

隔离

并发现象无处不在。服务器端程序长久以来都必须负责处理基本并发编程模型,而随着多核处理器的日益普及,客户端程序也将需要执行一些任务。随着并发操作的不断增加,有关确保安全的问题也浮现出来。也就是说,在面对大量逻辑并发操作和不断变化的物理硬件并行性程度时,程序必须继续保持同样级别的稳定性和可靠性。

与对应的顺序代码相比,正确设计的并发代码还必须遵循一些额外的规则。对内存的读写以及对共享资源的访问必须使用同步机制进行管制,以防发生冲突。另外,通常有必要对线程进行协调以协同完成某项工作。

这些附加要求所产生的直接结果是,可以从根本上确保线程始终保持一致并且保证其顺利向前推进。同步和协调对时间的依赖性很强,这就导致了它们具有不确定性,难于进行预测和测试。

这些属性之所以让人觉得有些困难,只是因为人们的思路还未转变过来。没有可供学习的专门API,也没有可进行复制和粘贴的代码段。实际上的确有一组基础概念需要您学习和适应。很可能随着时间的推移某些语言和库会隐藏一些概念,但如果您现在就开始执行并发操作,则不会遇到这种情况。本

文将介绍需要注意的一些较为常见的挑战,并针对您在软件中如何运用它们给出一些建议。

首先我将讨论在并发程序中经常会出错的一类问题。我把它们称为“安全隐患”,因为它们很容易发现并且后果通常比较严重。这些危险会导致您的程序因崩溃或内存问题而中断。

当从多个线程并发访问数据时会发生数据争用(或竞争条件)。特别是,在一个或多个线程写入一段数据的同时,如果有一个或多个线程也在读取这段数据,则会发生这种情况。之所以会出现这种问题,是因为Windows 程序(如C++ 和Microsoft .NET Framework 之类的程序)基本上都基于共享内存概念,进程中的所有线程均可访问驻留在同一虚拟地址空间中的数据。静态变量和堆分配可用于共享。请考虑下面这个典型的例子:

static class Counter {

internal static int s_curr = 0;

internal static int GetNext() {

return s_curr++;

}

}

Counter 的目标可能是想为GetNext 的每个调用分发一个新的唯一数字。但是,如果程序中的两个线程同时调用GetNext,则这两个线程可能被赋予相同的数字。原因是s_curr++ 编译包括三个独立的步骤:

1.将当前值从共享的s_curr 变量读入处理器寄存器。

2.递增该寄存器。

3.将寄存器值重新写入共享s_curr 变量。

按照这种顺序执行的两个线程可能会在本地从s_curr 读取了相同的值(比如42)并将其递增到某个值(比如43),然后发布相同的结果值。这样一来,GetNext 将为这两个线程返回相同的数字,导致算法中断。虽然简单语句s_curr++ 看似不可分割,但实际却并非如此。

忘记同步

这是最简单的一种数据争用情况:同步被完全遗忘。这种争用很少有良性的情况,也就是说虽然它们是正确的,但大部分都是因为这种正确性的根基存在问题。

这种问题通常不是很明显。例如,某个对象可能是某个大型复杂对象图表的一部分,而该图表恰好可使用静态变量访问,或在创建新线程或将工作排入线程池时通过将某个对象作为闭包的一部分进行传递可变为共享图表。

当对象(图表)从私有变为共享时,一定要多加注意。这称为发布,在后面的隔离上下文中会对此加以讨论。反之称为私有化,即对象(图表)再次从共享变为私有。

对这种问题的解决方案是添加正确的同步。在计数器示例中,我可以使用简单的联锁:

static class Counter {

internal static volatile int s_curr = 0;

internal static int GetNext() {

return Interlocked.Increment(ref s_curr);

}

}

它之所以起作用,是因为更新被限定在单一内存位置,还因为(这一点非常方便)存在硬件指令(LOCK INC),它相当于我尝试进行原子化操作的软件语句。

或者,我可以使用成熟的锁定:

static class Counter {

internal static int s_curr = 0;

private static object s_currLock = new object();

internal static int GetNext() {

lock (s_currLock) {

return s_curr++;

}

}

}

lock 语句可确保试图访问GetNext 的所有线程彼此之间互斥,并且它使用CLR

System.Threading.Monitor 类。C++ 程序使用CRITICAL_SECTION 来实现相同目的。虽然对这个特定的示例不必使用锁定,但当涉及多个操作时,几乎不可能将其并入单个互锁操作中。

粒度错误

即使使用正确的同步对共享状态进行访问,所产生的行为仍然可能是错误的。粒度必须足够大,才能将必须视为原子的操作封装在此区域中。这将导致在正确性与缩小区域之间产生冲突,因为缩小区域会减少其他线程等待同步进入的时间。

例如,让我们看一看图1所示的银行帐户抽象。一切都很正常,对象的两个方法(Deposit 和Withdraw)看起来不会发生并发错误。一些银行业应用程序可能会使用它们,而且不担心余额会因为并发访问而遭到损坏。

图1 银行帐户

class BankAccount {

private decimal m_balance = 0.0M;

private object m_balanceLock = new object();

internal void Deposit(decimal delta) {

lock (m_balanceLock) { m_balance += delta; }

}

internal void Withdraw(decimal delta) {

lock (m_balanceLock) {

if (m_balance < delta)

throw new Exception("Insufficient funds");

m_balance -= delta;

}

}

}

但是,如果您想添加一个Transfer 方法该怎么办?一种天真的(也是不正确的)想法会认为由于Deposit 和Withdraw 是安全隔离的,因此很容易就可以合并它们:

class BankAccount {

internal static void Transfer(

BankAccount a, BankAccount b, decimal delta) {

Withdraw(a, delta);

Deposit(b, delta);

}

// As before

}

这是不正确的。实际上,在执行Withdraw 与Deposit 调用之间的一段时间内资金会完全丢失。正确的做法是必须提前对 a 和 b 进行锁定,然后再执行方法调用:

class BankAccount {

internal static void Transfer(

BankAccount a, BankAccount b, decimal delta) {

lock (a.m_balanceLock) {

lock (b.m_balanceLock) {

Withdraw(a, delta);

Deposit(b, delta);

}

}

}

// As before

}

事实证明,此方法可解决粒度问题,但却容易发生死锁。稍后,您会了解到如何修复它。

读写撕裂

如前所述,良性争用允许您在没有同步的情况下访问变量。对于那些对齐的、自然分割大小的字—例如,用指针分割大小的内容在32 位处理器中是32 位的(4 字节),而在64 位处理器中则是64 位的(8 字节)—读写操作是原子的。如果某个线程只读取其他线程将要写入的单个变量,而没有涉及任何复杂的不变体,则在某些情况下您完全可以根据这一保证来略过同步。

但要注意。如果试图在未对齐的内存位置或未采用自然分割大小的位置这样做,可能会遇到读写撕裂现象。之所以发生撕裂现象,是因为此类位置的读或写实际上涉及多个物理内存操作。它们之间可能会发生并行更新,并进而导致其结果可能是之前的值和之后的值通过某种形式的组合。

例如,假设ThreadA 处于循环中,现在需要仅将0x0L 和0xaaaabbbbccccddddL 写入64 位变量s_x 中。ThreadB 在循环中读取它(参见图2)。

图2 将要发生的撕裂现象

internal static volatile long s_x;

void ThreadA() {

int i = 0;

while (true) {

s_x = (i & 1) == 0 ? 0x0L : 0xaaaabbbbccccddddL;

i++;

}

}

void ThreadB() {

while (true) {

long x = s_x;

Debug.Assert(x == 0x0L || x == 0xaaaabbbbccccddddL);

}

}

您可能会惊讶地发现ThreadB 的声明可能会被触发。原因是ThreadA 的写入操作包含两部分(高32 位和低32 位),具体顺序取决于编译器。ThreadB 的读取也是如此。因此ThreadB 可以见证值

0xaaaabbbb00000000L 或0x00000000aaaabbbbL。

无锁定重新排序

有时编写无锁定代码来实现更好的可伸缩性和可靠性是一种非常诱人的想法。这样做需要深入了解目标平台的内存模型(有关详细信息,请参阅Vance Morrison 的文章"Memory Models:Understand the Impact of Low-Lock Techniques in Multithreaded Apps",网址

为https://www.360docs.net/doc/073570703.html,/magazine/cc163715)。如果不了解或不注意这些规则可能会导致内存重新排序错误。之所以发生这些错误,是因为编译器和处理器在处理或优化期间可自由重新排序内存操作。例如,假设s_x 和s_y 均被初始化为值0,如下所示:

internal static volatile int s_x = 0;

internal static volatile int s_xa = 0;

internal static volatile int s_y = 0;

internal static volatile int s_ya = 0;

void ThreadA() {

s_x = 1;

s_ya = s_y;

}

void ThreadB() {

s_y = 1;

s_xa = s_x;

}

是否有可能在ThreadA 和ThreadB 均运行完成后,s_ya 和s_xa 都包含值0?看上去这个问题很可笑。或者s_x = 1 或者s_y = 1 会首先发生,在这种情况下,其他线程会在开始处理其自身的更新时见证这一更新。至少理论上如此。

遗憾的是,处理器随时都可能重新排序此代码,以使在写入之前加载操作更有效。您可以借助一个显式内存屏障来避免此问题:

void ThreadA() {

s_x = 1;

Thread.MemoryBarrier();

s_ya = s_y;

}

.NET Framework 为此提供了一个特定API,C++ 提供了_MemoryBarrier 和类似的宏。但这个示例并不是想说明您应该在各处都插入内存屏障。它要说明的是在完全弄清内存模型之前,应避免使用无锁定代码,而且即使在完全弄清之后也应谨慎行事。

在Windows(包括Win32 和.NET Framework)中,大多数锁定都支持递归获得。这只是意味着,即使当前线程已持有锁但当它试图再次获得时,其要求仍会得到满足。这使得通过较小的原子操作构成较大的原子操作变得更加容易。实际上,之前给出的BankAccount 示例依靠的就是递归获得:Transfer 对Withdraw 和Deposit 都进行了调用,其中每个都重复获得了Transfer 已获得的锁定。但是,如果最终发生了递归获得操作而您实际上并不希望如此,则这可能就是问题的根源。这可能是因为重新进入而导致的,而发生重新进入的原因可能是由于对动态代码(如虚拟方法和委托)的显式

调用或由于隐式重新输入的代码(如STA 消息提取和异步过程调用)。因此,最好不要从锁定区域对动态方法进行调用。

例如,设想某个方法暂时破坏了不变体,然后又调用委托:

class C {

private int m_x = 0;

private object m_xLock = new object();

private Action m_action = ...;

internal void M() {

lock (m_xLock) {

m_x++;

try { m_action(); }

finally {

Debug.Assert(m_x == 1);

m_x--;

}

}

}

}

C 的方法M 可确保m_x 不发生改变。但会有很短的一段时间,m_x 会先递增1,然后再重新递减。对m_action 的调用看起来没有任何问题。遗憾的是,如果它是从 C 类用户接受的委托,则表示任何代码都可以执行它所请求的操作。这包括回调到同一实例的M 方法。如果发生了这种情况,finally 中的声明可能会被触发;同一堆栈中可能存在多个针对M 的活动的调用(即使您未直接执行此操作),这必然会导致m_x 包含的值大于1。

当多个线程遇到死锁时,系统会直接停止响应。多篇《MSDN 杂志》文章都介绍了死锁的发生原因以及使死锁变得能够接受的一些方法,其中包括我自己的文章"No More Hangs:Advanced Techniques to Avoid and Detect Deadlocks in .NET Apps"(网址为https://www.360docs.net/doc/073570703.html,/magazine/cc163618)以及Stephen Toub 的2007 年10 月.NET 相关问题专栏(网址

为https://www.360docs.net/doc/073570703.html,/magazine/cc163352),因此这里只做简单的讨论。总而言之,只要出现了循环等待链—例如,ThreadA 正在等待ThreadB 持有的资源,而ThreadB 反过来也在等待ThreadA 持有的资源(也许是间接等待第三个ThreadC 或其他资源)—则所有向前的推进工作都可能会停下来。此问题的常见根源是互斥锁。实际上,之前所示的BankAccount 示例遇到的就是这个问题。如果ThreadA 试图将$500 从帐户#1234 转移到帐户#5678,与此同时ThreadB 试图将$500 从#5678 转移到#1234,则代码可能发生死锁。

使用一致的获得顺序可避免死锁,如图3所示。此逻辑可概括为“同步锁获得”之类的名称,通过此操

作可依照各个锁之间的某种顺序动态排序多个可锁定的对象,从而使得在以一致的顺序获得两个锁的同时必须维持两个锁的位置。另一个方案称为“锁矫正”,可用于拒绝被认定以不一致的顺序完成的锁获得。

图3 一致的获得顺序

class BankAccount {

private int m_id; // Unique bank account ID.

internal static void Transfer(

BankAccount a, BankAccount b, decimal delta) {

if (a.m_id < b.m_id) {

Monitor.Enter(a.m_balanceLock); // A first

Monitor.Enter(b.m_balanceLock); // ...and then B

} else {

Monitor.Enter(b.m_balanceLock); // B first

Monitor.Enter(a.m_balanceLock); // ...and then A

}

try {

Withdraw(a, delta);

Deposit(b, delta);

} finally {

Monitor.Exit(a.m_balanceLock);

Monitor.Exit(b.m_balanceLock);

}

}

// As before ...

}

但锁并不是导致死锁的唯一根源。唤醒丢失是另一种现象,此时某个事件被遗漏,导致线程永远休眠。在Win32 自动重置和手动重置事件、CONDITION_VARIABLE、CLR Monitor.Wait、Pulse 以及PulseAll 调用等同步事件中经常会发生这种情况。唤醒丢失通常是一种迹象,表示同步不正确,无法重置等待条件或在wake-all(WakeAllConditionVariable 或Monitor.PulseAll)更为适用的情况下使用了wake-single 基元(WakeConditionVariable 或Monitor.Pulse)。

此问题的另一个常见根源是自动重置事件和手动重置事件信号丢失。由于此类事件只能处于一个状态(有信号或无信号),因此用于设置此事件的冗余调用实际上将被忽略不计。如果代码认定要设置的两个调用始终需要转换为两个唤醒的线程,则结果可能就是唤醒丢失。

锁保护

当某个锁的到达率与其锁获得率相比始终居高不下时,可能会产生锁保护。在极端的情况下,等待某个锁的线程超过了其承受力,就会导致灾难性后果。对于服务器端的程序而言,如果客户端所需的某些受锁保护的数据结构需求量大增,则经常会发生这种情况。

例如,请设想以下情况:平均来说,每100 毫秒会到达8 个请求。我们将八个线程用于服务请求(因为我们使用的是8-CPU 计算机)。这八个线程中的每一个都必须获得一个锁并保持20 毫秒,然后才能展开实质的工作。

遗憾的是,对这个锁的访问需要进行序列化处理,因此,全部八个线程需要160 毫秒才能进入并离开锁。第一个退出后,需要经过140 毫秒第九个线程才能访问该锁。此方案本质上无法进行调整,因此备份的请求会不断增长。随着时间的推移,如果到达率不降低,客户端请求就会开始超时,进而发生灾难性后果。

众所周知,在锁中是通过公平性对锁进行保护的。原因在于在锁本来已经可用的时间段内,锁被人为封闭,使得到达的线程必须等待,直到所选锁的拥有者线程能够唤醒、切换上下文以及获得和释放该锁为止。为解决这种问题,Windows 已逐渐将所有内部锁都改为不公平锁,而且CLR 监视器也是不公平的。

对于这种有关保护的基本问题,唯一的有效解决方案是减少锁持有时间并分解系统以尽可能减少热锁(如果有的话)。虽然说起来容易做起来难,但这对于可伸缩性来说还是非常重要的。

“蜂拥”是指大量线程被唤醒,使得它们全部同时从Windows 线程计划程序争夺关注点。例如,如果在单个手动设置事件中有100 个阻塞的线程,而您设置该事件…嗯,算了吧,您很可能会把事情弄得一团糟,特别是当其中的大部分线程都必须再次等待时。

实现阻塞队列的一种途径是使用手动设置事件,当队列为空时变为无信号而在队列非空时变为有信号。遗憾的是,如果从零个元素过渡到一个元素时存在大量正在等待的线程,则可能会发生蜂拥。这是因为只有一个线程会得到此单一元素,此过程会使队列变空,从而必须重置该事件。如果有100 个线程在等待,那么其中的99 个将被唤醒、切换上下文(导致所有缓存丢失),所有这些换来的只是不得不再次等待。

两步舞曲

有时您需要在持有锁的情况下通知一个事件。如果唤醒的线程需要获得被持有的锁,则这可能会很不凑巧,因为在它被唤醒后只是发现了它必须再次等待。这样做非常浪费资源,而且会增加上下文切换的总数。此情况称为两步舞曲,如果涉及到许多锁和事件,可能会远远超出两步的范畴。

Win32 和CLR 的条件变量支持在本质上都会遇到两步舞曲问题。它通常是不可避免的,或者很难解决。

两步舞曲问题在单处理器计算机上情况更糟。在涉及到事件时,内核会将优先级提升应用到唤醒的线程。这几乎可以保证抢先占用线程,使其能够在有机会释放锁之前设置事件。这是在极端情况下的两步舞曲,其中设置ThreadA 已切换出上下文,使得唤醒的ThreadB 可以尝试获得锁;当然它无法做到,因此它将进行上下文切换以使ThreadA 可再次运行;最终,ThreadA 将释放锁,这将再次提升ThreadB 的优先级,使其优先于ThreadA,以便它能够运行。如您所见,这涉及了多次无用的上下文切换。

优先级反转

修改线程优先级常常是自找苦吃。当不同优先级的许多线程共享对同样的锁和资源的访问权时,可能会发生优先级反转,即较低优先级的线程实际无限期地阻止较高优先级线程的进度。这个示例所要说明的道理就是尽可能避免更改线程优先级。

下面是一个优先级反转的极端示例。假设低优先级的ThreadA 获得某个锁L。随后高优先级的ThreadB 介入。它尝试获得L,但由于ThreadA 占用使得它无法获得。下面就是“反转”部分:好像ThreadA 被人为临时赋予了一个高于ThreadB 的优先级,这一切只是因为它持有ThreadB 所需的锁。

当ThreadA 释放了锁后,此情况最终会自行解决。遗憾的是,如果涉及到中等优先级的ThreadC,设想一下会发生什么情况。虽然ThreadC 不需要锁L,但它的存在可能会从根本上阻止ThreadA 运行,这将间接地阻止高优先级ThreadB 的运行。

最终,Windows Balance Set Manager 线程会注意到这一情况。即使ThreadC 保持永远可运行状态,ThreadA 最终(四秒钟后)也将接收到操作系统发出的临时优先级提升指令。但愿这足以使其运行完毕并释放锁。但这里的延迟(四秒钟)相当巨大,如果涉及到任何用户界面,则应用程序用户肯定会注意到这一问题。

实现安全性的模式

现在我已经找出了一个又一个的问题,好消息是我这里还有几种设计模式,您可以遵循它们来降低上述问题(尤其是正确性危险)的发生频率。大多数问题的关键是由于状态在多个线程之间共享。更糟的是,此状态可被随意控制,可从一致状态转换为不一致状态,然后(但愿)又重新转换回来,具有令人惊讶的规律性。

当开发人员针对单线程程序编写代码时,所有这些都非常有用。在您向最终的正确目标迈进的过程中,很可能会使用共享内存作为一种暂存器。多年来 C 语言风格的命令式编程语言一直使用这种方式工作。

但随着并发现象越来越多,您需要对这些习惯密切加以关注。您可以按照Haskell、LISP、Scheme、ML 甚至F#(一种符合.NET 的新语言)等函数式编程语言行事,即采用不变性、纯度和隔离作为一类设计概念。

不变性

具有不变性的数据结构是指在构建后不会发生改变的结构。这是并发程序的一种奇妙属性,因为如果数据不改变,则即使许多线程同时访问它也不会存在任何冲突风险。这意味着同步并不是一个需要考虑的因素。

不变性在C++ 中通过const 提供支持,在C# 中通过只读修饰符支持。例如,仅具有只读字段

的.NET 类型是浅层不变的。默认情况下,F# 会创建固定不变的类型,除非您使用可变修饰符。再进一步,如果这些字段中的每个字段本身都指向字段均为只读(并仅指向深层不可变类型)的另一种类型,则该类型是深层不可变的。这将产生一个保证不会改变的完整对象图表,它会非常有用。

所有这一切都说明不变性是一个静态属性。按照惯例,对象也可以是固定不变的,即在某种程度上可以保证状态在某个时间段不会改变。这是一种动态属性。Windows Presentation Foundation (WPF) 的可冻结功能恰好可实现这一点,它还允许在不同步的情况下进行并行访问(但是无法以处理静态支持的方式对其进行检查)。对于在整个生存期内需要在固定不变和可变之间进行转换的对象来说,动态不变性通常非常有用。

不变性也存在一些弊端。只要有内容需要改变,就必须生成原始对象的副本并在此过程中应用更改。另外,在对象图表中通常无法进行循环(除动态不变性外)。

例如,假设您有一个ImmutableStack,如图4所示。您需要从包含已应用更改的对象中返回新的ImmutableStack 对象,而不是一组变化的Push 和Pop 方法。在某些情况下,可以灵活使用一些技巧(与堆栈一样)在各实例之间共享内存。

图4 使用ImmutableStack

public class ImmutableStack {

private readonly T m_value;

private readonly ImmutableStack m_next;

private readonly bool m_empty;

public ImmutableStack() { m_empty = true; }

internal ImmutableStack(T value, Node next) {

m_value = value;

m_next = next;

m_empty = false;

}

public ImmutableStack Push(T value) {

return new ImmutableStack(value, this);

}

public ImmutableStack Pop(out T value) {

if (m_empty) throw new Exception("Empty.");

return m_next;

}

}

节点被推入时,必须为每个节点分配一个新对象。在堆栈的标准链接列表实现中,必须执行此操作。但是要注意,当您从堆栈中弹出元素时,可以使用现有的对象。这是因为堆栈中的每个节点是固定不变的。

固定不变的类型无处不在。CLR 的System.String 类是固定不变的,还有一个设计指导原则,即所有新值类型都应是固定不变的。此处给出的指导原则是在可行和合适的情况下使用不变性并抵抗执行变化的诱惑,而最新一代的语言会使其变得非常方便。

纯度

即使是使用固定不变的数据类型,程序所执行的大部分操作仍是方法调用。方法调用可能存在一些副作用,它们在并发代码中会引发问题,因为副作用意味着某种形式的变化。通常这只是表示写入共享内存,但它也可能是实际变化的操作,如数据库事务、Web 服务调用或文件系统操作。在许多情况下,我希望能够调用某种方法,而又不必担心它会导致并发危险。有关这一方面的一些很好示例就是GetHashCode 和ToString on System.Object 等简单的方法。很多人都不希望它们带来副作用。

纯方法始终都可以在并发设置中运行,而无需添加同步。尽管纯度没有任何常见语言支持,但您可以非常简单地定义纯方法:

1.它只从共享内存读取,并且只读取不变状态或常态。

2.它必须能够写入局部变量。

3.它可以只调用其他纯方法。

因此,纯方法可以实现的功能非常有限。但当与不变类型结合使用时,纯度就会成为可能而且非常方便。一些函数式语言默认情况下都采用纯度,特别是Haskell,它的所有内容都是纯的。任何需要执行副作用的内容都必须封装到一个被称为monad 的特殊内容中。但是我们中的多数人都不使用Haskell,因此我们必须遵照纯度约定。

隔离

前面我们只是简单提及了发布和私有化,但它们却击中了一个非常重要的问题的核心。由于状态通常在多个线程之间共享,因此同步是必不可少的(不变性和纯度也很有趣味)。但如果状态被限制在单个线程内,则无需进行同步。这会导致软件在本质上更具伸缩性。

实际上,如果状态是隔离的,则可以自由变化。这非常方便,因为变化是大部分 C 风格语言的基本内置功能。程序员已习惯了这一点。这需要进行训练以便能够在编程时以函数式风格为主,对大多数开发人员来说这都相当困难。尝试一下,但不要自欺欺人地认为世界会在一夜之间改为使用函数式风格编程。

所有权是一件很难跟踪的事情。对象是何时变为共享的?在初始化时,这是由单线程完成的,对象本身还不能从其他线程访问。将对某个对象的引用存储在静态变量中、存储在已在线程创建或排列队列时共享的某个位置或存储在可从其中的某个位置传递性访问的对象字段中之后,该对象就变为共享对象。开发人员必须特别关注私有与共享之间的这些转换,并小心处理所有共享状态。

注塑成型常见问题及对策

制品缺陷及产生的原因克服方法 ■真空泡 原因:厚壁部的料流快速冻结,收缩受到阻止,充模不足因而产生内部真空泡。模具温度不合适。料筒温度不合适。注塑压力和保压不足。 处理方法避免设计不均匀壁厚结构。修正浇口位置使流料垂直注入厚壁部。提高模具温度。降低料筒温度。增加注塑压力和保压压力。 ■因水分的存在而产生气泡 原因:粒料的干燥程度不够而引起树脂水解。 处理方法:充分进行预干燥注意料斗的保温管理 ■熔合痕 原因:模料筒温度不合适。注塑压力不合适。模具温度不作乱。模槽内未设排气孔。 处理方法:提高料筒温度。增大注塑压力。提高模具温度。设置排气孔。 ■凹痕 原因:因冷却速度较慢的厚壁内表的收缩而产生凹痕(壁厚设计不合理)。注塑压力不够。注塑量不够。模具温度过高或注塑后的冷却不够。保压不足。浇口尺寸不合理。避免壁厚的不均匀。

处理方法:提高注塑压力。增大注塑量。如模具温度合理则需加长冷却时间。处长保压时间。放大浇口尺寸,特别是其厚度。 ■糊斑(全部或部分变色) 原因:料筒温度设定不合理。料筒内发生局部存料现象。树脂侵入料筒和注口的结合缝内(长期存料)。装有倒流阀或倒流环。因干燥不够而引起的水解。注塑机容量过大。 处理方法:降低料筒温度。避免死角结构。设法消除结合部的缝隙。避免使用倒流阀和倒流环。按规定条件进行预干燥。选择适当容量的注塑机。 ■银纹 原因:料筒温度不合适。流料的停留时间过长。注塑速度不合适。浇口尺寸不合理。粒料的干燥度不够。注塑压力不合适。 处理方法:降低料筒温度。消除存料现象。降低注塑速度。放大浇口尺寸。按规定条件进行预干燥。降低注塑压力。 ■浇口处呈现波纹(不透明) 原因:注塑速度不合适。保压时间不合适。模具温度不合理。浇口尺寸不合理。 处理方法:提高注塑速度。缩短保压时间,使充模后不再有熔料注入。提高模具温度。放大浇口尺寸。 ■漩纹及波流痕 原因:模具温度不合适。注塑压力不合适。浇口尺寸不合理。

信息系统常见问题解决方案

管理信息系统 常见问题解决方案 1.保存时【解析XML数据失败】 2.点运行时提示【格式错误】 3.与【服务器连接失败】 4. .netframework 2.0安装时【版本冲突】问题. 5.登陆不上.提示返回的【数据集为空】 6.点运行时显示【无法启动应用程序,请与应用程序提供商】问题1.解析XML数据失败问题:

如果出现上图提示,大多都是输入数字的时候用的是全角。 解决方法:使输入法在半角状态重新输入即可。 全角与半角切换方法如图。 https://www.360docs.net/doc/073570703.html, framework 问题。 这个是系统自动将.net framework 2.0 自动升级到3.0或者3.5的状态。 解决方法:进入控制面板, 先卸载.net framework 3.5,从高版本到低版本卸载。卸载完后重新装下.net framework 2.0就可以了。关闭电脑的自动更新功能.(我的电脑-属性—自动更新-关闭) 3.网络问题

主要是网络原因,请检查网络情况.建议使用电信网络. 4…netframework版本问题 这个问题的原因是系统内安装了.netframework其它或者更高的版本. 解决:在控制面板—添加或删除程序里找到如图 把.netframework从下往上全部卸载,重新安装2.0版本 5.防火墙问题. 登陆时候登陆不上.见截图 网络情况差的时候也会出现这个问题. 但是网络情况良好,ping 服务器地址正常.

原因是windows防火墙阻止了登陆.关闭windows防火墙即可. 6.无法启动应用程序 点运行时出现错误如截图: 解决办法.: 出现这个问题的原因有可能是windows防火墙或者360防火墙屏蔽了地址.如果将所有防火墙和杀毒软件关闭以后仍然出现这个问题- 打开C盘,在工具,文件夹选项里,选中显示所有文件和文件夹, 打开C:\Documents and Settings\Administrator\Local Settings,下的apps文件夹( 红颜色的表示当前电脑登陆用户名) ,将apps文件夹删除. 然后在系统网页里点运行,重新下载程序.

施工中常见问题及解决方案

1、存在问题:外墙铺贴外墙砖,阴阳角的嵌缝剂吸水导致窗框周围渗水 解决措施:外墙砖改为涂刷质感漆,在上窗框处预留滴水槽 2、存在问题:现浇混凝土板内预埋PVC电管时,混凝土板经常沿管线出现裂缝。解决措施:钢筋混凝土板中预埋PVC等非金属管时,沿管线贴板底(板底主筋外侧)放置钢丝网片,后期内墙、棚顶等满铺纤维网格布,刮腻子抹平。 3、存在问题:首层隔墙自身发生沉降,墙身出现沉降裂缝。 解决措施:首层隔墙下应设钢筋砼基础梁或基础,不得直接将隔墙放置在建筑地面上,不得采用将原建筑地面中的砼垫层加厚(元宝基础)作为隔墙基础的做法。 4、存在问题:凸出屋面的管道、井、烟道周边渗漏。 解决措施:凸出屋面的管道、井、烟道周边应同屋面结构一起整浇一道钢筋混凝土防水反梁,屋面标高定于最高完成面以上250mm。 5、存在问题:门窗耐候胶打胶不美观 解决措施:门窗预留洞口尺寸跟现场测量尺寸存在误差,造成窗框与墙垛的间隙不均匀,打胶不美观。建议在抹灰过程中安装窗户副框,副框对门窗起到一个定尺、定位的作用。弥补门窗型材与墙体间的缝隙,利于防水;增强门窗水平与垂直方向的平整度。有利于门窗的安装,使其操作性更好。 6、存在问题:室内地面出现裂纹 解决措施:出现裂纹的原因是施工中细石混凝土的水灰比过大,混凝土的坍落度过大,分格条过少。在处理抹光层时加铺一道网格布,网格布分割随同分格条位置一同断开。 7、存在问题:内墙抹灰出现部分空鼓 解决措施:空鼓原因,内墙砂浆强度较低,抹灰前基层清理不干净,不同材料的墙面连接未设置钢丝网;墙面浇水不透,砂浆未搅拌均匀。气温过高时,砂浆失水过快;抹灰后未适当浇水养护。解决办法,抹灰前应清净基层,基层墙面应提前浇水、要浇透浇匀,当基层墙体平整和垂直偏差较大时,不可一次成活,应分层抹灰、应待前一层抹灰层凝结后方可涂抹后一层的厚度不超过15mm。 9、存在问题:吊顶顶棚冬季供暖后出现凝结水,造成吊顶发霉 原因:冬季供暖后,管道井内沙层温度升高,水蒸气上升遇到温度较低的现浇板,形成凝结水,凝结水聚集造成吊顶发霉。解决措施:管道井底部做防水层截断水蒸气上升渠道。 10、存在问题:楼顶太阳能固定没有底座,现阶段是简单用钢丝绳捆绑在管道井上固定 解决措施:建议后期结构施工中,现浇顶层楼板时一起浇筑太阳能底座。 11、存在问题:阳台落水管末端直接通入预留不锈钢水槽,业主装修后,楼上的垃圾容易堵塞不锈钢水槽,不易清扫。 解决措施:建议后在阳台上落水管末端预留水簸萁,益于后期的清扫检查。12、存在问题:卫生间PVC管道周围出现渗水现象 原因,出现渗漏的卫生间PVC管道,周围TS防水卷材是冬季低于5℃的环境下施工的,未及时浇筑防水保护层,防水卷材热胀冷缩,胶粘剂开裂,造成PVC

常见软件故障及处理方法

常见软件故障及处理方法(转载) 软件故障的原因 软件发生故障的原因有几个,丢失文件、文件版本不匹配、内存冲突、内存耗尽,具体的情况不同,也许只因为运行了一个特定的软件,也许很严重,类似于一个的系统级故障。 为了避免这种错误的出现,我们可以仔细研究一下每种情况发生的原因,看看怎样检测和避免。 丢失文件: 你每次启动计算机和运行程序的时候,都会牵扯到上百个文件,绝大多数文件是一些虚拟驱动程序vir tual device drivers (VxD),和应用程序非常依赖的动态链接库dynamic link library (DLL)。VXD允许多个应用程序同时访问同一个硬件并保证不会引起冲突,DLL则是一些独立于程序、单独以文件形式保存的可执行子程序,它们只有在需要的时候才会调入内存,可以更有效地使用内存。当这两类文件被删除或者损坏了,依赖于它们的设备和文件就不能正常工作。 要检测一个丢失的启动文件,可以在启动PC的时候观察屏幕,丢失的文件会显示一个“不能找到某个设备文件”的信息和该文件的文件名、位置,你会被要求按键继续启动进程。 造成类似这种启动错误信息的绝大多数原因是没有正确使用卸载软件。如果你有一个在WINDOWS启动后自动运行的程序如Norton Utilities、 Nuts and Bolts等,你希望卸载它们,应该使用程序自带的“卸载”选项,一般在“开始”菜单的“程序”文件夹中该文件的选项里会有,或者使用“控制面板”的“添加/卸载”选项。如果你直接删除了这个文件夹,在下次启动后就可能会出现上面的错误提示。其原因是W INDOWS找不到相应的文件来匹配启动命令,而这个命令实际上是在软件第一次安装时就已经置入到注册表中了。你可能需要重新安装这个软件,也许丢失的文件没有备份,但是至少你知道了是什么文件受到影响和它们来自哪里。 对文件夹和文件重新命名也会出现问题,在软件安装前就应该决定好这个新文件所在文件夹的名字。 如果你删除或者重命名了一个在“开始”菜单中运行的文件夹或者文件,你会得到另外一个错误信息,在屏幕上会出现一个对话框,提示“无效的启动程序”并显示文件名,但是没有文件的位置。如果桌面或者“开始”菜单中的快捷键指向了一个被删除的文件和文件夹,你会得到一个类似的“丢失快捷键”的提示。 丢失的文件可能被保存在一个单独的文件中,或是在被几个出品厂家相同的应用程序共享的文件夹中,例如文件夹\SYMANTEC就被Norton Utilities、Norton Antivirus和其他一些 Symantec 出品的软件共享,而对于\WINDOWS\SYSTEM来说,其中的文件被所有的程序共享。你最好搜索原来的光盘和软盘,重新安装被损坏的程序。 文件版本不匹配: 绝大多数的WIN 9X用户都会不时地向系统中安装各种不同的软件,包括WINDOWS的各种补丁例如Y2K,或者将WIN 95 升级到WIN 98,这其中的每一步操作都需要向系统拷贝新文件或者更换现存的文件。每当这个时候,就可能出现新软件不能与现存软件兼容的问题。 因为在安装新软件和WINDOWS升级的时候,拷贝到系统中的大多是DLL文件,而DLL不能与现存软件“合作”是产生大多数非法操作的主要原因,即使会快速关闭被影响的程序,你也没有额外的时间来保存尚未完成的工作。 WINDOWS的基本设计使得上述DLL错误频频发生。和其他版本不同,WIN 95允许多个文件共享\WINDO WS\SYSTEM文件夹的所有文件,例如可以有多个文件使用同一个Whatnot.dll,而不幸的是,同一个DLL文件的不同版本可能分别支持不同的软件,很多软件都坚持安装适合它自己的Whatnot.dll版本来代替以前的,但是新版本一定可以和其他软件“合作愉快”吗?如果你运行了一个需要原来版本的DLL的程序,就会出现“非法操作”的提示。 在安装新软件之前,先备份\WINDOWS\SYSTEM 文件夹的内容,可以将DLL错误出现的几率降低,既然

Windows7常见问题解决方案

Windows7常见问题解决方案 问题1:我的笔记本电脑有无线上网的功能,为什么我上不了网? 现在的笔记本电脑大都可以无线上网,但买回来后却上不了网,访问什么网页都无法找到该页。想要用无线上网,要做的准备工作很多: (1)部分笔记本电脑会在机身两旁设置独立的无线功能开关,将开关调至“on”的状态,才能打开笔记本电脑的无线功能;如果没有独立的无线功能开关,可以通过两种方法:1. 摁住“Win”+“X”键,即可打开Windows移动中心找到“无线网络”,摁下“打开无线”就完成了;2.笔记本电脑都有“Fn”键,摁住“Fn”+“F2”(有些电脑不同,如LenovoTinkpad,只需找到无线标识,然后摁“Fn”+无线标识所在的键),启用之后,大多会在屏幕上显示无线功能以开启。Ok,现在你已经完成了笔记本电脑上的准备工作,接下来要搜索网络。 (2)在此之前请先确定路由器和线的连接没有问题(如果在公共场所即可跳过)。之后搜索附近可供连接的无线点,有些须要密码,有些咖啡厅、连锁快餐店、火车站、机场等地有设置可连接上网的无线点。如果你在特殊的地点,如公司,要连接请询问公司网络管理员即可。问题2:无线网络应该怎么连接? 请先确认问题1中上网前先准备的工作,之后请看以下步骤。 【1】单击通知区域内的网络图标。 【2】单击要连接的无线点(如出现“通过此网络发送的信息可能对其他人可见”,即说明该无线点未加密,这是不安全的网络),在右上角可以看信号强度,若连接信号强度强的网速就快,反之,网速越慢。 【3】单击“连接”按钮。 页脚内容1

【4】这时会出现三个选项,分别是:家庭网络、工作网络、公用网络。如果是用户连接到家中或公司的无线点,有时需要与其他计算机共享文件,因此单击“家庭网络”。如 果连接到公用网络,请单击公用网络,可以不与其他计算机共享文件。 【5】确认操作完毕后请单击“关闭”按钮。 【6】接着把鼠标指针移动至通知区域的无线网络图标处,稍微停留,就会出现一个白色的框,若显示“Internet访问”就可以上网了。 问题3:有“可以使用”的无线点,连接上了却无法上网,还出现了一个黄色的感叹号? 现象:笔记本电脑显示“未连接-连接可用”,连接后虽显示连接,还出现了“未识别的网络-无网络访问”。 在此之前应先明白一个真理:无线上网的连接稳定性比不上传统的有线宽带,易受干扰,请参考以下说明,排除故障。 (1)先单击网络图标,把鼠标指针移动至已连接的无线点上,停留1秒左右,会显示出一白色框,查看其安全类型,若显示安全类型为“WEP”,则说明这个无线点有密码, 无法随意连接,一般的密码是连接不上的。 (2)由于无线网络属于开放式网络连接,为避免陌生人随意连接,许多非公用无线上网的无线点会设置各种安全验证,其中就有一选项是“指定的电脑才能连接”功能,所 以用户无法直接连接至这个无线点。 (3)虽然检测到该无线点,但由于信号过弱,就需要选择信号强的无线点进行连接,如果搜索到的无线点信号都不是很好,请到空旷的地点再试试。 建议:【1】请把无线路由器放在距离电脑较近的地点,且该地点要空旷,无较厚的遮挡物。 页脚内容2

项目管理常见问题解决办法

当前项目管理中的问题非常复杂,问题的多样性可以用五彩缤纷来形容,可能是不一而足的。我们且对一些有针对性的具体问题及其建议的解决方案尝试汇总如下: 1、问题一:如何修订不合理的项目目标 问题描述:很多项目在签约的阶段就定义了不合理的目标,这往往是由于销售人员的过度承诺或给客户主动建立或被动接受过高的期望值。 建议的解决方案:要使项目成功实施,就必须在合同约定目标基础上对项目目标进行再次定义,项目经理需要运用必要的办法在项目管理生命周期内不断去寻求客户或用户可接受的最小或最优的目标边界。当然,项目经理一上任就想动项目或合同的边界,显然会容易引起客户的反感。比较好的策略是先在项目实施过程中做出必要的业绩,在与此同时和客户之间建立彼此的基本信任。在充分了解客户所在企业的核心需求后,适时拿出有理有据的方案一点一点地说服客户调整项目目标边界。 2、问题二:如何处理用户强烈坚持需要的需求 问题描述:用户有时很强烈表示需要一个功能,态度很坚决,应该如何应对 建议的解决方案:从项目所要实现的业务全局出发,考虑用户这个需求到底要解决的是什么问题,然后再和用户探讨真正解决问题的办法,这样用户不但可能收回自己的想法,还会建立对你分析能力的信任。这就是所谓的比用户多想一步,并站在更高的角度去解决当前存在的问题。除此之外,如果用户提出的需求非常到位,确实指出项目所交付的产品的严重不足,项目经理要高度重视,及时调用公司资源予以解决,切记关键性需求绝对不可以绕过或采取临时解决方案。针对用户潜在的或尚未发现的需求,需要提前拟定预案,而不是等这些潜在需求发生后再考虑客户化开发解决,这样就很有可能使项目产生不必要的延期和徒增用户对项目延期所产生的不满情绪。 3、问题三:如何处理来自用户的需求变更 问题描述:用户的需求往往随着项目的深入而有所变化,项目验收标准的不断更改,导致项目验收延期或成本超支等诸多不可控的情况发生。 建议的解决方案:在项目一开始就需要定义变更流程,一般是要求用户内部意见一致后再统一以正式项目文件的方式提交给项目经理做评估分析,项目经理综合考虑此需求的变更对实施成本和项目进度可能造成的影响。必要时寻求公司高层或变更控制委员会(CCB)反馈

软件开发项目管理中的常见问题和解决方案(精)

软件项目管理常见问题及解决方案资料来源:互联网整理人:class4117 软件行业是一个极具挑战性和创造性的行业, 软件开发是一项复杂的系统工程, 牵涉到各方面的因素, 在实际工作中, 经常会出现各种各样的问题, 甚至面临失败。如何总结、分析失败的原因,得出有益的教训,对一个公司来说,是在今后的项目中取得成功的关键。 1 .项目管理在软件开发中的应用的成因 目前我国大部分软件公司,无论是产品型公司还是项目型公司,都没有形成完全适合自己公司特点的软件开发管理模式, 虽然有些公司根据软件工程理论建立了一些软件开发管理规范,但并没有从根本上解决软件开发的质量控制问题。这样导致软件产品质量不稳定, 软件后期的维护、升级出现麻烦, 同时最终也会损害用户的利益。 2. 软件项目管理常见问题及解决方案 (1缺乏项目管理系统培训 在软件企业中, 以前几乎没有专门招收项目管理专业的人员来担任项目经理, 被任命的项目经理主要是因为他们能够在技术上独当一面, 而管理方面特别是项目管理方面的知识比较缺乏。 解决方案:项目经理接受系统的项目管理知识培训是非常必要的, 有了专业领 域的知识与实践, 再加上项目管理知识与实践和一般管理的知识和经验的有机结合,必能大大提高项目经理的项目管理水平。 (2项目计划意识问题 项目经理对总体计划、阶段计划的作用认识不足, 因此制定总体计划时比较随意, 不少事情没有仔细考虑; 阶段计划因工作忙等理由经常拖延, 造成计划与控制管理脱节,无法进行有效的进度控制管理。

解决方案:计划的制定需要在一定条件的限制和假设之下采用渐近明细的方式进行不断完善。提高项目经理的计划意识, 采用项目计划制定相关知识、技术、 工具,加强对开发计划、阶段计划的有效性进行事前事后的评估。 (3管理意识问题 部分项目经理不能从总体上把握整个项目, 而是埋头于具体的技术工作, 造成 项目组成员之间忙的忙、闲的闲,计划不周、任务不均、资源浪费。有些项目经理没有很好的管理方法,不好安排的工作只好自己做,使项目任务无法有效、合理地分配给相关成员,以达到“负载均衡”。 解决方案:加强项目管理方面的培训,并通过对考核指标的合理设定和宣传引导项目经理更好地做好项目管理工作。技术骨干在担任项目经理之前, 最好能经过系统的项目管理知识,特别是其中的人力资源管理、沟通管理的学习, 并且在实际工作中不断提高自己的管理素质, 丰富项目管理经验, 提高项目管理意识。 (4沟通意识问题 在项目中一些重要信息没有进行充分和有效的沟通。在制定计划、意见反馈、情况通报、技术问题或成果等方面与相关人员的沟通不足, 造成各做各事、 重复 劳动,甚至造成不必要的损失 ; 有些人没有每天定时收邮件的习惯,以至于无法 及时接收最新的信息。 解决方案:制定有效的沟通制度和沟通机制, 提高沟通意识 ; 采取多种沟通方式, 提高沟通的有效性。通过制度规定对由于未及时收取邮件而造成损失的责任归属 ; 对于特别重要的内容要采用多种方式进行有效沟通以确保传达到位, 例如:除发送 邮件外还要电话提醒、回执等, 重要的内容还要通过举行各种会议进行传达。 (5风险管理意识问题

计算机网络常见故障及解决方案

一、计算机网络常见故障及解决方案 1 无法连接上网的故障 解决方案:检查调制解调器的驱动是否正常。检查调制解调器是否处于可以使用状态:双击“控制面板→系统→设备管理”,在列表中选择调制解调器并单击“属性”,确认是否选中“设备已存在,请使用”选项。检查端口的正确性:双击“控制面板→调制解调器”,单击选择调制解调器,然后单击“属性”,在“通用”选项卡上,检验列出的端口是否正确。如果不正确。请选择正确的端口,然后单击“确定”按钮。确认串口的I/O地址和IRQ设置是否正确:双击“控制面板→系统→设备管理”,再单击“端口”,选取一个端口,然后单击“属性”。单击“资源”选项卡显示该端口的当前资源设置,请参阅调制解调器的手册以找到正确的设置,在“资源”对话框中。检查“冲突设备列表”以查看调制解调器使用的资源是否与其它设备发生冲突,如果调制解调器与其它设备发生冲突,请单击“更改设置”,然后单击未产生资源冲突的配置。检验端口设置:双击“控制面板→调制解调器”,单击选择调制解调器,然后单击“属性”,在出现的菜单中选择“连接”选项卡以便检查当前端口设置,如波特率、数据位、停止位和校验等。 2 无法浏览网络 解决方案:第一是因为在Windows启动后,要求输入Microsoft网络用户登录口令时,点了“取消”按钮所造成的,如果是要登录NT服务器。必须以合法的用户登录,并且输入正确口令。第二种是与其它的硬件产生冲突。打开“控制面板→系统→设备管理”。查看硬件的前面是否有黄色的问号、感叹号或者红色的问号。如果有,必须手工更改这些设备的中断和 I/O地址设置。第三是防火墙导致网络不通。在局域网中为了保障安全,安装了一些防火墙。这样很容易造成一些“假”故障,例如Ping不通但是却可以访问对方的计算机,不能够上网却可以使用QQ等。判断是否是防火墙导致的故障很简单,你只需要将防火墙暂时关闭。然后再检查故障是否存在。例如用户初次使用IE访问某个网站时,防火墙会询问是否允许该程序访问网络,一些用户因为不小心点了不允许这样以后都会延用这样的设置,自然导致网络不通了。比较彻底的解决办法是在防火墙中去除这个限制。 3 IE默认的搜索引擎被篡改 在IE工具栏中有一个搜索引擎的工具按钮,点击之可以进行网络搜索。IE默认使用微软的搜索引擎。如果IE的搜索引擎被恶意网站篡改,只要你点击那个“搜索”按钮,就会链接到恶意网站。 解决方案:单击“开始/运行”,输入“Regedit”打开注册表,定位到 HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Search分支,找到“SearehAssistant”键值名,在右面窗口点击“修改”,将其值改为某个搜索引擎的网址,然后再找到“CustomizeSeareh”键值名,将其键值改为某个搜索引擎的网址。 4 上网速度慢 解决方案:

常见问题及解决方法

重庆电子招投标常见问题 目录 一、常见问题说明......................................................................................................... 3 二、投标人注意事项6? 1、投标函 (6) 2、导入word目录乱得问题6? 3、资格标制作?7 4、技术标 (7) 5、填报“清单数据"中分部分项清单综合单价与综合合价 (7) 5、填报措施项目费9? 6、填报主要材料........................................................................................................... 9 三、招标人注意事项 (10) 1、填写项目基本信息10? 2、模版得应用............................................................................................................. 10 3、清单数据 (10) 4、添加补遗、答疑或者最高限价文件..................................................................... 12 五、标盾使用说明12? 六、开标............................................................................................................................... 13一、常见问题说明 《金润电子标书生成器》软件需安装在WindowsXp系统上,暂不支持Vista与Win7系统,安装时不能插入任何加密锁,同时关闭所有杀毒软件与防火墙 1、安装了“重庆电子标书生成器(重庆)”,导入标书一闪而过,却没有导入任何文件? 答:金润电子标书生成器没有正确安装,若安装正常可在“打印机与传真"瞧到“金润电子标书生成器"得虚拟打印机,如下图:

常见问题及解决方法

重庆电子招投标常见问题

目录 一、常见问题说明 (3) 二、投标人注意事项 (6) 1、投标函 (6) 2、导入word目录乱的问题 (6) 3、资格标制作 (7) 4、技术标 (7) 5、填报“清单数据”中分部分项清单综合单价与综合合价 (7) 5、填报措施项目费 (9) 6、填报主要材料 (9) 三、招标人注意事项 (10) 1、填写项目基本信息 (10) 2、模版的应用 (10) 3、清单数据 (10) 4、添加补遗、答疑或者最高限价文件 (12) 五、标盾使用说明 (12) 六、开标 (13)

一、常见问题说明 《金润电子标书生成器》软件需安装在Windows Xp系统上,暂不支持Vista和Win7系统,安装时不能插入任何加密锁,同时关闭所有杀毒软件和防火墙 1、安装了“重庆电子标书生成器(重庆)”,导入标书一闪而过,却没有导入任何文件? 答:金润电子标书生成器没有正确安装,若安装正常可在“打印机和传真”看到“金润电子标书生成器”的虚拟打印机,如下图: 解决方法:A:运行以下命令安装打印机不包含引号 “C:\WINDOWS\system32\BJPrinter\PrinterSet.exe”,点击“安装打印机”,如(图一)。此后如弹出提示框都选择继续、信任、通过等按钮,如(图二):倘若被阻止则程序安装不完整,电子标书生成器软件无法正常使用。 图一图二 或者 B:卸载金润电子标书生成器并且重新安装。 2、安装了“重庆电子标书生成器(重庆)”,却无法双击打开或者报错? 答:金润软件相关程序可能被防火墙或者杀毒软件默认阻止了。 解决方法:查看杀毒防护软件,在阻止列表将其设为信任,以360安全卫士为例

电脑常见问题即解决方案

?浏览:10268 ?| ?更新:2014-03-01 21:21 ?| ?标签:计算机 计算机已经变成我们生活中不可或缺的工具,在日常使用中,难免会出现很多问题而没有办法解决。在这里根据平时积累的一些经验,加上在网上搜索的一些资料,在这里晒出来,希望能给大家的学习和工作带来一些帮助。 我们日常使用计算机中出现的问题一搬可以分为硬件问题和软件问题两大类。我们在处理计算机问题的时候,一搬遵守以上原则:首先怀疑软件问题,再怀疑硬件问题。 桌面常见问题 1. 1 一、当把窗口最大化后,任务栏被覆盖,不是自动隐藏,怎么回事? 最佳答案 1.在任务栏上右击,在弹出的菜单中单击“属性”, 2.然后在弹出的"任务栏和开始菜单属性"对话框中选择下面两个选项: "锁定任务栏"和"将任务栏保持在其它窗口的前端"

二、IE窗口的大小在哪里设置? 最佳答案: 先把所有的IE窗口关了;只打开一个IE窗口;最大化这个窗口;关了它;O K,以后的默认都是最大化的了也可以用鼠标直接将IE窗口拖动为最大或最小) 三、桌面不显示图标,但有开始任务栏? 最佳答案: 1、右击桌面---->排列图标---->显示桌面图标把它选上! 2、右击桌面---->属性---->桌面(标签)---->自定义桌面--->把需要的显示项目前打勾,应用确定! 四、桌面IE图标不见了(桌面上自定义桌面没有IE选项) 最佳答案: 右键点击我的电脑->资源管理器->在窗口左侧选择“桌面”->把这里的I E图标拖到桌面上即可。 五、任务栏的快速启动图标不见了? 最佳答案: 右键任务栏---工具栏---快速启动---打勾. 六、显示桌面的快捷键丢失了,怎么找回? 最佳答案 打开“记事本”: 把下面内容复制上去:

运维常见问题详细解决方案

运维工作及常见解决方案

1.概述 1.1编写目的 编写本解决方案的目的是对运维人员在遇到问题的时候提供一个可参考的依据。运维人员以此解决方案作为今后在运维工作中遇到相同问题的一个指南和依据,指导运维人员如何去解决类似问题。也为新来运维人员熟悉运维工作。本解决方案主要从问题类型、问题描述和解决方案等方面进行说明。 1.2适用范围 适用于运维人员、新来运维人员及相关人员。 2.运维工作流程 ?客户打找运维服务,接到电话,先判断是由运维做还是的 人做; ?运维分机号为1,,先记录房间号,报修时间,服务开始时 间,故障现象及记录接线人。 ?负责人先想解决方法,告知运维人员大体方向,运维人员 根据了解的情况想解决方案,在去见客户的时候知道如何 操作; ?负责人给运维人员派工单,运维人员去执行; ?执行完之后跟负责人交待此次工作结果;

?回复,双方接收 ?每周的运维工作数据及运维工作报告的电子档须在下周一 十点前发送到负责人邮箱中。 3.运维工作内容 1)终端软件维护 2)网络调整 3)电话调整 4)机房巡检 5)服务器操作:应用系统包括安全系统、移动执法系统、备份系 统、机房监控系统;网络设备包括交换机、路由器、防火墙、 流量控制系统。 6)机房清洁 7)空调维护 8)其他 4.常见问题解决方案 4.1电脑装应用软件的步骤 新台式机和笔记本: ●内网:装内外必要软件外网:按客户需求装 ●杀毒软件:内网装趋势杀毒软件外网装安全防护软件

●360安全卫士,修复系统漏洞,点击修复,在安装路径中产生 一个hotfix文件夹,然后把工具中的hotfix文件夹里面所有文 件拷贝到安装路径下的hotfix文件夹; ●装常用的工具:内网 、以及用户要求的软件外网:根据用户的需求来装 旧电脑: ●IP设置,每次都要记录IP,在用完之后把IP设置为原来的IP ●旧机器在装系统之前,我的文档及桌面上的文件要备份,用U 盘拷贝出来再装系统(要特别注意财物室的机器重装系统, 在装系统之前还需要把C盘里面的某些文件给拷贝出来) 注意事项: 1.保证OA系统所以功能都能用 2.不安装盗版软件

房屋建筑工程施工中常见问题与解决方法

房屋建筑工程施工中常见问题与解决方法

房屋建筑工程施工中常见问题与解决方法 一、结构设计容易出现的设计问题 【一】因施工原因造成问题 1、部门、专业间配合类 存在问题1:女儿墙、沉厕管井侧墙、屋面天窗壁等,大多是在钢筋混凝土板上为砌筑的砖或砌块墙体,砌体和混凝土2种不同材料界面处易形成裂缝,造成漏水。解决措施:所有建筑要求做泛水处,均采用现浇混凝土泛水,泛水高度如建筑无特定要求的,按200mm高。 存在问题2:梁与板混凝土强度等级不同,施工不便。解决措施:同时浇筑的梁、板混凝土强度等级应一致。 存在问题3:地下室后浇带要在至少60d后方可浇筑,但地下室外墙的防水及基坑回填工程却需要先行施工,如何处理。 解决措施:地下室外墙后浇带处,在外侧设一通高预制钢筋混凝土板,该板置于地下室外墙防水层内侧,建筑设计需考虑该处的防水做法,结构设计需考虑该板在后浇带尚未浇筑前用于拦挡回填土。 存在问题4:有些墙垛的尺寸太小,不便于砌筑且质量不宜保证。 解决措施:与混凝土墙、柱相连的墙垛尺寸≤120mm×120mm或某一边长小于120mm时,采用现浇混凝土墙垛。

2、现浇混凝土楼板裂缝类 存在问题1:屋面板混凝土强度等级偏高,易产生裂缝而漏水。 解决措施:屋面结构混凝土强度等级尽可能≤C25级。 存在问题2:地下室底板混凝土强度等级偏高,易产生裂缝而漏水。 解决措施:施工周期较长的大体积混凝土(如地下室底板、外墙等),设计时宜考虑混凝土的后期强度,可采用不少于60d龄期的混凝土强度。 存在问题3:地下室底板及侧墙后浇带新旧混凝土界面处易产生裂缝,经常出现渗漏。 解决措施:后浇带接缝处应做成企口;主筋在后浇带处按断开处理;采用膨胀止水带。 存在问题4:现浇混凝土板内预埋PVC电管时,混凝土板经常沿管线出现裂缝。 解决措施:钢筋混凝土板中预埋PVC等非金属管时,沿管线贴板底(板底主筋外侧)放置300mm宽?1.0×10×10钢丝网片。 存在问题5:现电梯间前室有大量设备管线暗埋在混凝土板内,造成结构隐患,易出现裂缝。 解决措施:预埋管线非常多的板(如高层建筑电梯前室等),板厚宜按结构设计所需板厚+30mm。 存在问题6:屋面等有防水要求的混凝土板,对裂缝控制要求较严,如何控制裂缝。 解决措施:有防水要求的屋面板结构混凝土内添加抗裂纤维。添加量由招标中心或总承包提供中标产品参数,由设计单位确定。 3、防止首层地坪沉陷类

常见问题及解决方法

电子招投标常见问题

目录 一、常见问题说明 (3) 二、投标人注意事项 (6) 1、投标函 (6) 2、导入word目录乱的问题 (6) 3、资格标制作 (7) 4、技术标 (7) 5、填报“清单数据”中分部分项清单综合单价与综合合价 (7) 5、填报措施项目费 (9) 6、填报主要材料 (9) 三、招标人注意事项 (10) 1、填写项目基本信息 (10) 2、模版的应用 (10) 3、清单数据 (10) 4、添加补遗、答疑或者最高限价文件 (12) 五、标盾使用说明 (12) 六、开标 (13)

一、常见问题说明 《金润电子标书生成器》软件需安装在Windows Xp系统上,暂不支持Vista和Win7系统,安装时不能插入任何加密锁,同时关闭所有杀毒软件和防火墙 1、安装了“电子标书生成器()”,导入标书一闪而过,却没有导入任何文件? 答:金润电子标书生成器没有正确安装,若安装正常可在“打印机和传真”看到“金润电子标书生成器”的虚拟打印机,如下图: 解决方法:A:运行以下命令安装打印机不包含引号 “C:\WINDOWS\system32\BJPrinter\PrinterSet.exe”,点击“安装打印机”,如(图一)。此后如弹出提示框都选择继续、信任、通过等按钮,如(图二):倘若被阻止则程序安装不完整,电子标书生成器软件无常使用。 图一图二 或者 B:卸载金润电子标书生成器并且重新安装。 2、安装了“电子标书生成器()”,却无法双击打开或者报错? 答:金润软件相关程序可能被防火墙或者杀毒软件默认阻止了。 解决方法:查看杀毒防护软件,在阻止列表将其设为信任,以360安全卫士为例

常见问题及解决方案41831

常见问题及解决方案 1无法搜索到驱动 1.1现象 电子钥匙驱动安装成功后,第一次插入电子钥匙长时间搜索不到驱动。1.2解决方案 电子钥匙插入的时候,当系统弹出“找到新的硬件向导”对话框时,选择“从列表或指定位置安装(高级)”如下图所示: 点击“下一步”,弹出如下所示对话框,选择“不要搜索。我要自己选择要安装的驱动程序”,并点击“下一步”;

选择“GFA SEAL”,并点击“下一步”,如下图所示: 系统设置硬件驱动后,弹出如下图所示的对话框,选择“完成”即可。

2智能卡服务故障 2.1现象 驱动安装成功,而当插入电子钥匙时,没有“eSEAL被插入”或则“导入证书成功”的提示。 2.2解决方案 1、打开服务列表:打开控制面板->管理工具->服务。 2、确认服务列表中是否已经有智能卡服务(英文名称为”Smart Card”,中文名称为”智能卡”)的存在。 3、判断智能卡服务是否存在 (1)如果智能卡服务不存在,请到第4步; (2)如果智能卡服务存在,确定启动类型为“自动”以及登录身份为” NT AUTHORITY\LocalService”:双击智能卡服务,打开智能卡服务的属性,如果启动类型不是“自动”,设置启动类型为“自动”,如果是XP或则2003的系统,还

需要将登录身份账户名设置为“NT AUTHORITY\LocalService”,密码,确认密码设为空,如下图所示: 设置开机自动启动智能卡服务

设置智能卡服务的登录身份(密码部分请不要输入信息) 并重启计算机。 4、如果智能卡服务不存在, 则需要安装智能卡服务 A、如果系统System32目录下面不存在此三个文件:scarddlg.dll, scardssp.dll, scardsvr.exe,则需要拷贝相应的文件到用户的系统System32目录下。 B、打开控制台:(同时按键盘的Windows键和‘r’键)打开运行对话框,在打开右边的输入框中输入“cmd”,点击确定,即可打开控制台。 C、在控制台中运行”regsvr32 scardssp.dll”,然后运行“scardsvr.exe /install”注册智能卡服务,如果失败请运行” scardsvr.exe /reinstall”。 D、再次确认智能卡服务是否存在,如果存在,请转到第3步(2)。 设置智能卡服务的登录身份提示: 在以上第4步中,设置智能卡服务的登录身份时,如果不记得输入的用户名,可以通过如下步骤输入用户名:

Win7系统常见问题解决方案大全.doc

Win7系统常见问题解决方案大全 以下就是win7系统下常见故障的解决方法: 一、Win7蓝屏故障解决方案 出现此类故障的表现方式多样,有时在Windows启动时出现,有时在Windows下运行一些软件时出现,出现此类故障一般是由于用户操作不当促使Windows系统损坏造成,此类现象具体表现在以安全模式引导时不能正常进入系统,出现蓝屏故障。有时碎片太多也会引发此类故障,有一次笔者在整理碎片后就解决了该故障,如若排除此项可能则有以下几种原因可能引发该故障。 1、内存原因。由于内存原因引发该故障的现象比较常见,出现此类故障一般是由于芯片质量不佳所造成,但有时我们通过修改CMOS设置中的延迟时间CAS(将其由3改为2)可以解决该问题,倘若不行则只有更换内存条。 2、主板原因。由于主板原因引发该故障的概率较内存稍低,一般由于主板原因出现此类故障后,计算机在蓝屏后一般不会死机,而且故障出现频繁,对此唯有更换主板一途。 3、CPU原因,由于CPU原因出现此类故障的现象比较少见,一般常见于cyrix的CPU上,对此我们可以降低CPU频率,看能否解决,如若不行,则只有更换一途。 推荐阅读:蓝屏代码查询器 二、win7保护错误解决方案 出现此类故障的原因一般有以下几点: 1、内存条原因。倘若是内存原因,我们可以改变一下CAS延迟时间看能否解决问题,倘若内存条是工作在非66MHz 外频下,例如75MHz 、83MHz 、100MHz甚至以上的频率,我们可以通过降低外频或者内存频率来试一下,如若不行,只有将其更换了。 2、磁盘出现坏道。倘若是由于磁盘出现坏道引起,我们可以用安全模式引导系统,再用磁盘扫描程序修复一下硬盘错误,看能否解决问题。硬盘出现坏道后,如不及时予以修复,可能会导致坏道逐渐增多或硬盘彻底损坏,因此,我们应尽早予以修复。 3、Windows系统损坏。对此唯有重装系统方可解决。 4、在CMOS设置内开启了防病毒功能。此类故障一般在系统安装时出现,在系统安装好后开启此功能一般不会出现问题。三、win7随机性死机解决方案 死机故障比较常见,但因其涉及面广,是以维修比较麻烦,现在我将逐步予以详解。 1、病毒原因造成电脑频繁死机 由于此类原因造成该故障的现象比较常见,当计算机感染病毒后,主要表现在以下几个方面: ①系统启动时间延长; ②系统启动时自动启动一些不必要的程序;

注塑成型常见不良现象及处理措施

射出成型中常见不良现象 产生原因分析及对策 以下所列举的成型中产生的不良原因及对策是指在一般情况下可能出现的﹐也仅以本人在工作中的一些心得﹐体验为例﹐如有不妥或不周之处﹐还请各位行家指正﹗ (一)短射(不饱模) (1)短射(不饱模)﹕即是溶融塑料未能完全填充填满成型空间(模穴)各个角落 的现象。 (2)原因及改善对策(见下表) (二)毛边 (1)毛边﹕即是在分模面﹑流道周围及模仁镶块间隙内出现的膜状或毛刺状的 多余胶料。 (2)原因及改善对策(见下表)

*注﹕成型时间过长﹐模温过低而采用高压﹐高速射出也是产生毛边的常见原因 (三)银线 (1)银条(银线)即是在成型产品表面或表面附近﹐沿塑料流动方向﹐呈放射状 的银白色条纹。 (2)原因及改善对策(见下表)

(四)成品光泽度低 (1)成品光泽度低是指成品表面光泽达不到质量要求﹐表面无折光度。 (2)原因及改善对策(见下表) (五)变形 (1)变形可分为对角线的扭曲及平行边沿的曲翘两种﹐是成品成型中发生的不规则弯曲现象。 (2)原因及发善对策(见下表)

(六)顶白 (1)顶白(也叫白化)是指成品在脱模之际﹐在顶针或其它脱模部位出现白色痕迹。 (2)原因及改善对策(见下表) (七)结合线 (1)结合线是指在成型中﹐二道或多道熔融材料融合时出现的细线状。 (2)原因及改善对策(见下表)

(八)冲料痕 (1)冲料痕是指熔融材料在进料点附近﹐以浇口为中心而呈现的条纹状。 (2)原因及改善对策 (九)异色(黑纹) (1)异色(黑纹)是指在成型过程中﹐在成品表面出现的黑色或其它深色条纹。 (2)原因及改善对策(见下表)

初中生常见问题及解决方案

中学生常见学习问题及解决方案 一:课前不预习-知识导学 古人云,凡事预则立,不预则废。预就是提前对事情有所打算,有所计划,做到心中有数,并对事情结果加以预测。同样在学习中也需要提前准备,提前思考,先解决一些自己能解决的问题,疑难杂症留待上课时老师解决,这样减少问题,听课效果会更好。这就是预习。预习是有计划、按计划学习的一种表现,是良好学习习惯的重要组成部分。对于学习自然也是这样的 想要学好一门课 仅凭课堂上有限的45分钟是不够的,更重要的是在课外。如果平时能养成课前预习这一良好习惯,对学习会有很大帮助。 (一)不预习的危害 1.不预习无法掌握一节的重点.难点,导致听课效率不高 首先,学生要知道下节课要学习的内容,了解主要讲的是什么,不预习是无法知道的,所以我们要提前预习课文。通过预习,学生就可以对课堂上的内容有大致的了解,从另外一方面可做到心中有数. 重点、难点突出,旧的知识和新的知识的联系,衔接。 2.不预习会导致学习的盲目性 预习可以使学习目的明确,清晰,学生的思维脉络会处于“高度快速反应”之中,接受、吸收、领会各种知识、技能全面而深刻 其效果不言而喻。加之课堂上对目标多次认知、操练和运用,加深了学生对目标的识记和再现。这样学生在课堂上根据自身的特点和课堂的目标要求有目的地学习、掌握、理解、分析、应用 避免了学习的盲目性,使学习具有目标性、针对性。 3.不预习会导致听课疲劳 由于人的精力是有限的 因此学生在每一节课里不可能自始自终地保持旺盛的精力 注意力和思维 一定会有走神的时候 这是人的生理机能所决定的。如果课前不预习 那么学生在课堂上的学习就带有盲目性 机械地围绕着老师的指挥棒疲惫地运转 ,到了自己需要集中注意力时却已使大脑处于疲惫状态而不能集中注意力,学生的主体作用就很难充分发挥。要想有效地、合理地分配课堂学习的注意力和思维,节省能力,这就要通过预习来完成。 (二)那么如何去预习呢?我们可以从以下几点入手: 1. 要有明确的预习目标。对预习的内容要做到心中有数,要明确预习什么,预习多少 需多长时间 采用什么方式,做到有的放矢。 2. 要有明确的预习内容。对预习的内容要积极理解,认真思考,争取记忆、消化其中的一部分。一些生词、短语、句型,尤其是生词和短语应该力争在上新课以前背下来。至于对话、课文,可以借助词典或对照课文注释,初步理解其大意。 3. 在预习的过程中要善于发现新问题.。然后带着这些问题有目的、有重点地去听课,养

相关文档
最新文档