- 浏览: 128564 次
- 性别:
- 来自: 南京
最新评论
-
cenyi2012:
来个图文并茂不是更好。。。
TabHost两种实现方式 -
youlingxifeng:
谢谢了,很受用,你有没有遇到过这样的问题啊build/core ...
Android源码编译全过程 -
flower_is:
不错不错!
Android的selector,背景选择器 -
yang668:
很好 真心的谢谢
反编译apk -
windloverain:
编译2.3的代码需要用1.6的sdk
另外,安装完java s ...
Android源码编译全过程
ConditionVariable介绍:
ConditionVariable类位于android.os.ConditionVariable,它可以帮助Android线程同步。在SDK上的介绍ConditionVariable不同于标准Java位于java.lang.Object wait() 和 notify() ,这个类可以等待自己,这就意味着 open(), close() 和 block() 可能会假死 ,如果使用ConditionVariable类的open()在调用 block() 之前, block() 将不会阻塞,相反将会返回立即。
该类一共有4个方法
boolean block(long timeout)
阻止当前线程知道条件是open,或直到超时,这里参数long timeout为超时设置,Android123提示大家如果你们从事过Win32开发,这个方法类似DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds); 函数。
void block()
阻止当前线程知道条件 open ,是上面的无超时等待重载版本。
void close()
重置条件为 close状态。
void open()
Open条件,释放所有线程的阻塞.
ConditionVariable 在创建时还有一种构造方法是 public ConditionVariable (boolean state) ,如果为true,默认时为opened,如果为false则是closed. ,默认public ConditionVariable()为closed.
ConditionVariable类位于android.os.ConditionVariable,它可以帮助Android线程同步。在SDK上的介绍ConditionVariable不同于标准Java位于java.lang.Object wait() 和 notify() ,这个类可以等待自己,这就意味着 open(), close() 和 block() 可能会假死 ,如果使用ConditionVariable类的open()在调用 block() 之前, block() 将不会阻塞,相反将会返回立即。
该类一共有4个方法
boolean block(long timeout)
阻止当前线程知道条件是open,或直到超时,这里参数long timeout为超时设置,Android123提示大家如果你们从事过Win32开发,这个方法类似DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds); 函数。
void block()
阻止当前线程知道条件 open ,是上面的无超时等待重载版本。
void close()
重置条件为 close状态。
void open()
Open条件,释放所有线程的阻塞.
ConditionVariable 在创建时还有一种构造方法是 public ConditionVariable (boolean state) ,如果为true,默认时为opened,如果为false则是closed. ,默认public ConditionVariable()为closed.
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.apis.app; // Need the following import to get access to the app resources, since this // class is in a sub-package. import com.example.android.apis.R; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.ConditionVariable; import android.os.IBinder; import android.os.Parcel; import android.os.RemoteException; import android.widget.RemoteViews; /** * This is an example of service that will update its status bar balloon * every 5 seconds for a minute. * */ public class NotifyingService extends Service { // Use a layout id for a unique identifier private static int MOOD_NOTIFICATIONS = R.layout.status_bar_notifications; // variable which controls the notification thread private ConditionVariable mCondition; @Override public void onCreate() { mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // Start up the thread running the service. Note that we create a // separate thread because the service normally runs in the process's // main thread, which we don't want to block. Thread notifyingThread = new Thread(null, mTask, "NotifyingService"); mCondition = new ConditionVariable(false); notifyingThread.start(); } @Override public void onDestroy() { // Cancel the persistent notification. mNM.cancel(MOOD_NOTIFICATIONS); // Stop the thread from generating further notifications mCondition.open(); } private Runnable mTask = new Runnable() { public void run() { for (int i = 0; i < 4; ++i) { showNotification(R.drawable.stat_happy, R.string.status_bar_notifications_happy_message); if (mCondition.block(5 * 1000)) break; showNotification(R.drawable.stat_neutral, R.string.status_bar_notifications_ok_message); if (mCondition.block(5 * 1000)) break; showNotification(R.drawable.stat_sad, R.string.status_bar_notifications_sad_message); if (mCondition.block(5 * 1000)) break; } // Done with our work... stop the service! NotifyingService.this.stopSelf(); } }; @Override public IBinder onBind(Intent intent) { return mBinder; } private void showNotification(int moodId, int textId) { // In this sample, we'll use the same text for the ticker and the expanded notification CharSequence text = getText(textId); // Set the icon, scrolling text and timestamp. // Note that in this example, we pass null for tickerText. We update the icon enough that // it is distracting to show the ticker text every time it changes. We strongly suggest // that you do this as well. (Think of of the "New hardware found" or "Network connection // changed" messages that always pop up) Notification notification = new Notification(moodId, null, System.currentTimeMillis()); // The PendingIntent to launch our activity if the user selects this notification PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, NotifyingController.class), 0); // Set the info for the views that show in the notification panel. notification.setLatestEventInfo(this, getText(R.string.status_bar_notifications_mood_title), text, contentIntent); // Send the notification. // We use a layout id because it is a unique number. We use it later to cancel. mNM.notify(MOOD_NOTIFICATIONS, notification); } // This is the object that receives interactions from clients. See // RemoteService for a more complete example. private final IBinder mBinder = new Binder() { @Override protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { return super.onTransact(code, data, reply, flags); } }; private NotificationManager mNM; }
发表评论
-
system挂载为rw
2011-07-28 15:07 2822adb shell #su #mount -o remou ... -
制作TextView的倒影
2011-07-19 13:52 2069package com.javaeye.graphics; ... -
Androkd开发坏境配置以及常用插件
2011-06-21 10:39 1124步骤: 1、安装jdk,并配置环境变量 2、解压android ... -
Android的selector,背景选择器
2011-05-22 11:50 1742首先android的selector是在drawable/xx ... -
PUSH机制
2011-04-20 13:54 13091、长连接 2、Android and XMPP htt ... -
ListView快速滑动搜索
2011-04-14 10:16 1268相关资料: Android-ListView快速滚动示例增加首 ... -
Android源码编译全过程
2011-03-18 09:39 83191, ubuntu 下源码编译 最好切换到root用户下进行操 ... -
测试环境Hosts设置
2011-02-25 18:25 1809设置方法: //启动虚拟手机并更改分区大小为128M emul ... -
Activity的launchMode
2011-01-16 17:02 852请看博客:http://marshal.easymorse.c ... -
android多分辨力支持 密度与分辨力
2010-12-29 15:37 1235关于Android的分辨率支持,为大家翻译官方文档 看世界杯的 ... -
用shape美化控件
2010-12-29 10:34 928如果你对Android系统自带的UI控件感觉不够满意, ... -
Android知识积累
2010-12-28 13:44 1007引用系统资源: android:textColor=& ... -
自定义对话框Dialog
2010-12-16 16:55 1527提醒对话框: 布局文件:alertdialog.xml < ... -
Dialog
2010-12-16 14:45 10941. 创建对话框 1. Showing ... -
Android 文件系统的结构
2010-11-06 22:56 10421、Android 文件系统的结构 Android源码编译后 ... -
DB和File工具类
2010-11-01 15:46 1544DB工具类: import java.io.B ... -
打造自己的动画效果
2010-10-29 14:25 1003当我们的软件基本功能都实现了之后,我们是不是还可以把它做的更好 ... -
画图,Shader Path
2010-10-28 16:42 1272package com.javaeye.android.my; ... -
Google API应用
2010-10-27 16:21 1619获取Location Provider: android lo ... -
使用SoundPool播放游戏音效
2010-10-12 15:51 1782在Android开发中我们经常使用MediaPlayer来播放 ...
相关推荐
- 条件变量(ConditionVariable):条件变量与互斥锁配合使用,允许线程因为某些条件未达成而进入休眠,直到其他线程改变条件,并发出信号唤醒等待该条件的线程。 - 读写锁(Read-WriteLock):读写锁允许多个线程...
// 状态栏通知的管理类对象,负责发通知、清楚通知等 private NotificationManager mNM; // 使用 Layout 文件的对应 ID 来作为通知的唯一识别 private static int MOOD_NOTIFICATIONS = R.layout.status_bar_...
在VC中,可以使用`ConditionVariable`类来实现条件变量的等待和唤醒。 6. **死锁**:如果处理不当,生产者消费者问题可能会引发死锁。例如,所有生产者都在等待缓冲区空间,而所有消费者都在等待缓冲区数据,系统就...
3. **线程同步**:由于线程间的共享数据可能导致竞态条件,Ruby提供了几种同步机制,包括`Mutex`(互斥锁)、`ConditionVariable`(条件变量)和`MonitorMixin`(监视器)。这些工具用于确保在任何时候只有一个线程访问...
线程间通信用于协调不同线程的行为,如通过WaitHandle(如ManualResetEvent、AutoResetEvent)或条件变量(ConditionVariable)。这些工具可以帮助线程在特定条件满足时进行同步。 总结,"c#多线程示例"项目中的...
在操作系统中,PV操作,即P操作(Wait或Acquire)和V操作(Signal或Release),是用于控制并发进程同步的重要机制,由荷兰计算机科学家Edsger Dijkstra提出。PV操作基于信号量Semaphore,它是实现多线程和多进程同步...
通过这些练习,学生不仅能够深入理解Linux和其他操作系统中的同步机制,还能够学会如何在自己的项目中正确地应用这些机制,以实现高效的并发控制。此外,这些知识对于未来的软件开发和系统设计工作都极为重要。
Cocos2d-x提供了一些机制来保证线程安全,如`CCThread`类用于管理线程,`Mutex`(互斥锁)和`ConditionVariable`(条件变量)用于同步线程,确保数据访问的一致性。 4. **调度器(Scheduler)**:Cocos2d-x的调度器是...
通过`Thread`类,开发者可以方便地启动新的线程,指定执行函数及其参数,同时还能获取线程ID,控制线程的生命周期(如暂停、恢复、等待和终止)。 2. **同步机制**:zthread提供了多种同步工具,如`Mutex`(互斥锁...
此外,一个好的多线程模板还会考虑线程间通信,如使用WaitHandle(如ManualResetEvent、AutoResetEvent)、ConditionVariable或TaskCompletionSource等机制,来协调线程间的执行顺序或等待特定事件的发生。...
8. **MutexLock, ConditionVariable**: muduo库还提供了线程同步的工具,如MutexLock和ConditionVariable,以确保在多线程环境中的正确同步。 通过muduo网络库,开发者可以轻松构建高性能、高并发的服务器应用,...
该项目是一款基于C++的多媒体基础库...该库提供媒体处理所需的公共能力,包括AVFormat、AVBuffer和AVBufferQueue的封装,跨平台的Task、Mutex、AutoLock和ConditionVariable接口封装,插件管理机制以及Pipeline机制。
至于Redis集群,这是一个分布式键值存储系统,常用于缓存、消息队列和数据库。Ruby社区有官方的`redis`客户端库,使得Ruby开发者可以轻松地与Redis服务器交互。在搭建Redis集群时,使用Ruby作为客户端语言非常方便,...
2. **Mutex 和 ConditionVariable 结合**:ConditionVariable(条件变量)允许线程等待特定条件满足后继续执行。一个线程调用 `wait`(通常与指定的Mutex一起使用),进入等待状态,直到其他线程调用 `signal` 或 `...
WaitHandle(如EventWaitHandle、AutoResetEvent、ManualResetEvent)和条件变量(ConditionVariable)是线程间通信的重要工具,它们可以用于线程间的信号传递,实现线程的唤醒和等待。 九、线程局部存储 ...
条件变量(`std::condition_variable`或`ConditionVariable`)则是在线程间同步的另一种方式,允许线程等待特定条件满足后再继续执行。 5. **线程局部存储**: 在多线程程序中,有时需要每个线程拥有自己的数据副本...
核心库是 Ruby 语言的基础,包括基本的数据类型(如字符串、数组、哈希)、控制结构(如循环、条件语句)以及对象模型等。扩展库则是一系列附加的功能,如文件系统操作、进程管理、XML 解析等,它们增强了 Ruby 的...