在AIDE中用boolean类型怎么用声明变量

IVsaIDE.EnableMainWindow 方法 (Microsoft.Vsa)
EnableMainWindow 方法
本文档已存档,并且将不进行维护。
IVsaIDE.EnableMainWindow 方法
.NET Framework 3.0
该成员支持 .NET Framework 结构,不应从代码直接使用。
命名空间: Microsoft.Vsa程序集: Microsoft.Vsa(在 microsoft.vsa.dll 中)
void EnableMainWindow (
bool isEnable
void EnableMainWindow (
boolean isEnable
function EnableMainWindow (
isEnable : boolean
isEnableWindows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter EditionWindows Vista、Microsoft Windows XP SP2 和 Windows Server 2003 SP1 支持 Microsoft .NET Framework 3.0。受以下版本支持:3.0、2.0、1.1、1.0IVsaIDE.EnableMainWindow 方法 (Microsoft.Vsa)
EnableMainWindow 方法
本文档已存档,并且将不进行维护。
IVsaIDE.EnableMainWindow 方法
.NET Framework 3.0
该成员支持 .NET Framework 结构,不应从代码直接使用。
命名空间: Microsoft.Vsa程序集: Microsoft.Vsa(在 microsoft.vsa.dll 中)
Sub EnableMainWindow ( _
isEnable As Boolean _
Dim instance As IVsaIDE
Dim isEnable As Boolean
instance.EnableMainWindow(isEnable)
void EnableMainWindow (
boolean isEnable
function EnableMainWindow (
isEnable : boolean
isEnableWindows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter EditionWindows Vista、Microsoft Windows XP SP2 和 Windows Server 2003 SP1 支持 Microsoft .NET Framework 3.0。受以下版本支持:3.0、2.0、1.1、1.0IVsaIDE.ShowIDE 方法
(Microsoft.Vsa)
ShowIDE 方法
本文档已存档,并且将不进行维护。
IVsaIDE.ShowIDE 方法
Visual Studio 2008
更新:2007 年 11 月该成员支持 .NET Framework 结构,不应从代码直接使用。 命名空间:
Microsoft.Vsa(在 Microsoft.Vsa.dll 中)
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
void ShowIDE(
bool showOrHide
/** @attribute PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust") */
void ShowIDE(
boolean showOrHide
function ShowIDE(
showOrHide : boolean
showOrHide类型:Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见。 受以下版本支持:3.5、3.0、2.0、1.1、1.0原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。在多处理器上实现原子操作就变得有点复杂。让我们一起来聊一聊在Intel处理器和Java里是如何实现原子操作的。
1.术语定义在了解原子操作的实现原理前,先要了解一下相关的术语,如表2-7所示。
2.处理器如何实现原子操作
32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。Pentium 6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器是不能自动保证其原子性的,比如跨总线宽度、跨多个缓存行和跨页表的访问。但是,处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。
(1)使用总线锁保证原子性
第一个机制是通过总线锁保证原子性。如果多个处理器同时对共享变量进行读改写操作(i++就是经典的读改写操作),那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的,操作完之后共享变量的值会和期望的不一致。举个例子,如果i=1,我们进行两次i++操作,我们期望的结果是3,但是有可能结果是2,如图2-3所示。
原因可能是多个处理器同时从各自的缓存中读取变量i,分别进行加1操作,然后分别写入系统内存中。那么,想要保证读改写共享变量的操作是原子的,就必须保证CPU1读改写共享变量的时候,CPU2不能操作缓存了该共享变量内存地址的缓存。
处理器使用总线锁就是来解决这个问题的。所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该
处理器可以独占共享内存。
(2)使用缓存锁保证原子性
第二个机制是通过缓存锁定来保证原子性。在同一时刻,我们只需保证对某个内存地址的操作是原子性即可,但总线锁定把CPU和内存之间的通信锁住了,这使得锁定期间,其他处理器不能操作其他内存地址的数据,所以总线锁定的开销比较大,目前处理器在某些场合下使用缓存锁定代替总线锁定来进行优化。
频繁使用的内存会缓存在处理器的L1、L2和L3高速缓存里,那么原子操作就可以直接在处理器内部缓存中进行,并不需要声明总线锁,在Pentium 6和目前的处理器中可以使用“缓存锁定”的方式来实现复杂的原子性。所谓“缓存锁定”是指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行的数据时,会使缓存行无效,在如图2-3所示的例子中,当CPU1修改缓存行中的i时使用了缓存锁定,那么CPU2就不能同时缓存i的缓存行。
但是有两种情况下处理器不会使用缓存锁定。
第一种情况是:当操作的数据不能被缓存在处理器内部,或操作的数据跨多个缓存行(cache line)时,则处理器会调用总线锁定。
第二种情况是:有些处理器不支持缓存锁定。对于Intel 486和Pentium处理器,就算锁定的内存区域在处理器的缓存行中也会调用总线锁定。
针对以上两个机制,我们通过Intel处理器提供了很多Lock前缀的指令来实现。例如,位测试和修改指令:BTS、BTR、BTC;交换指令XADD、CMPXCHG,以及其他一些操作数和逻辑指令(如ADD、OR)等,被这些指令操作的内存区域就会加锁,导致其他处理器不能同时访问它。
3.Java如何实现原子操作
在Java中可以通过锁和循环CAS的方式来实现原子操作。
(1)使用循环CAS实现原子操作
JVM中的CAS操作正是利用了处理器提供的CMPXCHG指令实现的。自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止,以下代码实现了一个基于CAS线程安全的计数器方法safeCount和一个非线程安全的计数器count。
* Alipay.com Inc.
* Copyright (c)
All Rights Reserved.
package chapter02;
import java.util.ArrayL
import java.util.L
import java.util.concurrent.atomic.AtomicI
* @author tengfei.fangtf
* @version $Id: Snippet.java, v 0.1
下午11:32:42 tengfei.fangtf Exp $
public class Counter {
private AtomicInteger atomicI = new AtomicInteger(0);
private int
public static void main(String[] args) {
final Counter cas = new Counter();
List&Thread& ts = new ArrayList&Thread&(600);
long start = System.currentTimeMillis();
for (int j = 0; j & 100; j++) {
Thread t = new Thread(new Runnable() {
public void run() {
for (int i = 0; i & 10000; i++) {
cas.count();
cas.safeCount();
ts.add(t);
for (Thread t : ts) {
t.start();
// 等待所有线程执行完成
for (Thread t : ts) {
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(cas.i);
System.out.println(cas.atomicI.get());
System.out.println(System.currentTimeMillis() - start);
* 使用CAS实现线程安全计数器
private void safeCount() {
for (;;) {
int i = atomicI.get();
boolean suc = atomicI.compareAndSet(i, ++i);
if (suc) {
* 非线程安全计数器
private void count() {
从Java 1.5开始,JDK的并发包里提供了一些类来支持原子操作,如AtomicBoolean(用原子方式更新的boolean值)、AtomicInteger(用原子方式更新的int值)和AtomicLong(用原子方式更新的long值)。这些原子包装类还提供了有用的工具方法,比如以原子的方式将当前值自增1和自减1。
(2)CAS实现原子操作的三大问题
在Java并发包中有一些并发框架也使用了自旋CAS的方式来实现原子操作,比如LinkedTransferQueue类的Xfer方法。CAS虽然很高效地解决了原子操作,但是CAS仍然存在三
大问题。ABA问题,循环时间长开销大,以及只能保证一个共享变量的原子操作。
1)ABA问题。因为CAS需要在操作值的时候,检查值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加1,那么A→B→A就会变成1A→2B→3A。从Java 1.5开始,JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compareAndSet方法的作用是首先检查当前引用是否等于预期引用,并且检查当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。
public boolean compareAndSet(V expectedReference, // 预期引用V newReference, // 更新后的引用int expectedStamp, // 预期标志int newSt
2)循环时间长开销大。自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销。如
果JVM能支持处理器提供的pause指令,那么效率会有一定的提升。pause指令有两个作用:第
一,它可以延迟流水线执行指令(de-pipeline),使CPU不会消耗过多的执行资源,延迟的时间
取决于具体实现的版本,在一些处理器上延迟时间是零;第二,它可以避免在退出循环的时候
因内存顺序冲突(Memory Order Violation)而引起CPU流水线被清空(CPU Pipeline Flush),从而
提高CPU的执行效率。
3)只能保证一个共享变量的原子操作。当对一个共享变量执行操作时,我们可以使用循
环CAS的方式来保证原子操作,但是对多个共享变量操作时,循环CAS就无法保证操作的原子
性,这个时候就可以用锁。还有一个取巧的办法,就是把多个共享变量合并成一个共享变量来
操作。比如,有两个共享变量i=2,j=a,合并一下ij=2a,然后用CAS来操作ij。从Java 1.5开始,
JDK提供了AtomicReference类来保证引用对象之间的原子性,就可以把多个变量放在一个对
象里来进行CAS操作。
(3)使用锁机制实现原子操作
锁机制保证了只有获得锁的线程才能够操作锁定的内存区域。JVM内部实现了很多种锁
机制,有偏向锁、轻量级锁和互斥锁。有意思的是除了偏向锁,JVM实现锁的方式都用了循环
CAS,即当一个线程想进入同步块的时候使用循环CAS的方式来获取锁,当它退出同步块的时
候使用循环CAS释放锁。amp // 更新后的标志
)注:本文源自《并发编程的艺术》一文。
Linux 互斥锁、原子操作实现原理
futex(快速用户区互斥的简称)是一个在Linux上实现锁定和构建高级抽象锁如信号量和POSIX互斥的基本工具。它们第一次出现在内核开发的2 5 7版;其语义在2 5 40固定下来,然后在2 6 x...
什么是原子操作?
什么是原子操作?
原子操作:就是在执行某一操作时不被打断。
Linux原子操作问题来源于中断、进程的抢占以及多核smp系统中程序的并发执行。
对于临界区的操作可以加锁来保证原子性...
操作系统概念-内核同步-原子操作
在同一个操作系统中,不同的进程经常需要相互协同工作,协同的方法一般有两种,一是直接共享逻辑地址空间,二是通过文件或消息共享数据。如果共享逻辑地址空间,则在进程执行的时候有可能会发生多个进程同时访问同一...
linux中关于原子操作
原子操作:就是在执行某一操作时不被打断。
linux原子操作问题来源于进程的抢占以及多核smp系统中程序的并发执行。
对于临界区的操作可以加锁来保证原子性,对于全局变量或静态变量操作则需要依赖于硬件平...
1 关于C++/Java 中的static成员和对象成员的说法正确的是()A
static 成员变量在对象的构造时产生;
static成员函数在对象的成员函数中无法调用;
原子操作指的是在执行过程中不会被别的代码中断的操作
位和整型变量原子操作依赖底层CPU的原子操作来实现,因此所有这些函数都与CPU架构密切相关整型原子操作定义typedef struct {
原子atom 本意是“不能被进一步分割的最小粒子”,原子操作 atomic operation 是“不能被中断的一系列操作”,在多处理上实现原子操作有些复杂。
处理器实现原子操作的方式...
&&&&Java 原子操作分为处理器实现和 Java 程序实现。
处理器实现:
没有更多推荐了,项目中有一个数据是可以用ORM来解释的,但是却分表存储。个人感觉有点麻烦,于是着手改造数据库。但是Android中使用NoSQL有点麻烦,于是想到了可以使用Java的Serializable特性。
写了两个方法,如下:
* 将一个可序列化对象序列化为BLOB
* @param s 实现了Serializable接口的对象
* @return BLOB对象,即二进制流,byte数组
public static byte[] getSerializedObject(Serializable s) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos =
oos = new ObjectOutputStream(baos);
oos.writeObject(s);
} catch (IOException e) {
} finally {
oos.close();
} catch (IOException e) {
byte[] result = baos.toByteArray();
* 从BLOB中读取被序列化的对象
* @param in BLOB对象,即二进制流,byte数组
* @return 被序列化的对象
public static Object readSerializedObject(byte[] in) {
Object result =
ByteArrayInputStream bais = new ByteArrayInputStream(in);
ObjectInputStream ois =
ois = new ObjectInputStream(bais);
result = ois.readObject();
} catch (Exception e) {
} finally {
ois.close();
} catch (Throwable e) {
ref:http://grokbase.com/t/gg/android-developers/119fc5hq5j/sqlite-and-json-or-java-object-serialization
有关SQLite的优缺点
★技术上的优点和特性
SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图、事务、触发器等)就是理所当然的了,咱今天就不细说了。今天主要聊...
public class Student implements Serializable{
public S...
Android SQLite存储自定义对象在SQLite数据库中可存储的数据类型有NULL、INTEGER、REAL(浮点型)、TEXT、BOOL,一共是五种数据类型。在Android开发中,我们存储...
//第一步,将Drawable对象转化为Bitmap对象
Bitmap bmp = (((BitmapDrawable)tmp.image).getBitmap());
//第二步,声明并创建一个...
android中SQLite的使用,其实倒也不难,但是与JDBC操作数据库相比,这个还是有点不顺手,而且我好久没写底层的封装了,使用SSM框架这些都不需要考虑......好了,废话不多说,下面直接建立...
在andorid端使用sqlite数据库是经常的是,通常来说都是对每个属性对应一个字段,然后分字段的来读取,但是今天我要说的不是这样的。我们通过对象序列化来存取。因为一个好的程序员总是得学会偷懒。
没有更多推荐了,

我要回帖

更多关于 vb中boolean常量 的文章

 

随机推荐