成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

android超時(shí),手機(jī)一直請(qǐng)求超時(shí)

如何在android下采用相對(duì)時(shí)間,實(shí)現(xiàn)超時(shí)等待的功能

一、函數(shù)功能說明

創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)武陵,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

pthread_cond_timedwait 等待一個(gè)條件變量,或者超時(shí)就會(huì)返回

POSIX有兩種時(shí)鐘類型

1、CLOCK_REALTIME: 系統(tǒng)范圍內(nèi)的實(shí)時(shí)時(shí)鐘,是個(gè)時(shí)鐘,可以通過命令等方式修改該系統(tǒng)時(shí)間.

2、CLOCK_MONOTONIC:系統(tǒng)起機(jī)時(shí)到現(xiàn)在的時(shí)間,不能被設(shè)置和修改.

pthread_cond_timedwait()在沒有設(shè)置條件變量屬性的時(shí)候,默認(rèn)用的是CLOCK_REALTIME時(shí)間,

因此在極端情況下會(huì)出現(xiàn)實(shí)際等待的時(shí)間與設(shè)置的超時(shí)時(shí)間不同。

所以,對(duì)于linux的超時(shí)等待功能,最好是使用CLOCK_MONOTONIC進(jìn)行實(shí)現(xiàn),并且通過pthread_condattr_setclock實(shí)現(xiàn)。

而對(duì)于android系統(tǒng)而言,是不支持pthread_condattr_setclock,通過驗(yàn)證可以采用函數(shù)pthread_cond_timedwait_monotonic實(shí)現(xiàn)。

下面直接給出代碼的實(shí)現(xiàn)功能。

二、超時(shí)等待功能

[cpp] view plain copy

#include stdio.h

#include string.h

#include pthread.h

#include sys/time.h

#include sys/times.h

#include unistd.h

#include time.h

static pthread_mutex_t s_mut = PTHREAD_MUTEX_INITIALIZER;

static pthread_cond_t s_cond = PTHREAD_COND_INITIALIZER;

void PthreadAttr_Init(void);

unsigned long long getSysTime(void);

void waitTimeout(void);

void PthreadAttr_Init(void)

{

#if defined(ANDROID)

#else

pthread_condattr_t cattr;

int iRet = -1;

iRet = pthread_condattr_init(cattr);

if (iRet != 0)

{

return;

}

pthread_mutex_init(s_mut, NULL);

pthread_condattr_setclock(cattr, CLOCK_MONOTONIC);

pthread_cond_init(s_cond, cattr);

pthread_condattr_destroy(cattr);

#endif

return;

}

void waitTimeout(void)

{

unsigned long long ullbefore = getSysTime();

unsigned long long ullafter = 0;

#if defined(ANDROID)

#if defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC) // 支持ANDROID下NDK的編譯,采用相對(duì)時(shí)間

struct timespec outtime;

memset(outtime, 0x00, sizeof(struct timespec ));

clock_gettime(CLOCK_MONOTONIC, outtime);

outtime.tv_sec += 2;

pthread_mutex_lock(s_mut);

pthread_cond_timedwait_monotonic(s_cond,s_mut, outtime);

pthread_mutex_unlock(s_mut);

ullafter = getSysTime();

printf("####01 interval[%lld] ms\n", ullafter - ullbefore);

#else //支持ANDROID下NDK的編譯,采用絕對(duì)時(shí)間

struct timeval now;

struct itmespec outtime;

gettimeofday(now, NULL);

outtime.tv_sec = now..tv_sec + 3;

outtime.tv_nsec = now.tv_usec * 1000;

pthread_mutex_lock(s_mut);

pthread_cond_timedwait(s_cond, s_mut, outtime);

pthread_mutex_unlock(s_mut);

ullafter = getSysTime();

printf("####02 interval[%lld] ms\n", ullafter - ullbefore);

#endif

#else // 支持LINUX下的編譯,采用絕對(duì)時(shí)間

struct timespec outtime;

memset(outtime, 0x00, sizeof(struct timespec ));

clock_gettime(CLOCK_MONOTONIC, outtime);

outtime.tv_sec += 4;

pthread_mutex_lock(s_mut);

pthread_cond_timedwait(s_cond, s_mut, outtime);

pthread_mutex_unlock(s_mut);

ullafter = getSysTime();

printf("####03 interval[%lld] ms\n", ullafter - ullbefore);

#endif

return;

}

unsigned long long getSysTime(void)

{

unsigned long long milliseconds = 0;

struct tms t_tmsTime;

clock_t t_CurTime;

static int s_clks_per_sec = 0;

if (s_clks_per_sec == 0)

{

s_clks_per_sec = sysconf(_SC_CLK_TCK);

}

if (s_clks_per_sec == 0)

{

return 0;

}

t_CurTime = times(t_tmsTime);

if (1000 % s_clks_per_sec == 0)

{

milliseconds = (1000 /s_clks_per_sec)*(unsigned long long )t_CurTime;//換算成毫秒

}

else

{

milliseconds = 1000 * (unsigned long long )t_CurTime/s_clks_per_sec;//換算成毫秒

}

return milliseconds;

}

int main(void)

{

PthreadAttr_Init();

waitTimeout();

return 0;

}

編譯命令:

gcc test_ptthrad_conf_timewait_monotonic.c -o test_ptthrad_conf_timewait_monotonic -lpthread -lrt

linux下的測(cè)試結(jié)果:

####03 interval[4010] ms

如何修改android系統(tǒng)的“屏幕超時(shí)”

今天修改了android2.3的“屏幕超時(shí)”部分,主要是修改了超時(shí)時(shí)間,添加了“永不休眠”選項(xiàng)。這部分修改只是更改了對(duì)應(yīng)的XML文件,沒有涉及到代碼修改,大家都知道xml文件的作用,這里就不多說了。需要修改的文件如下:

android2.3\packages\apps\Settings\res\values\arrays.xml 中:

!-- Display settings. The delay in inactivity before the screen is turned off. These are shown ain a list dialog. --

string-array name="screen_timeout_entries"

item15 seconds/item

item30 seconds/item

item1 minute/item

item10 minutes/item

item30 minutes/item

itemnever sleep/item

/string-array

!-- Do not translate. --

string-array name="screen_timeout_values" translatable="false"

!-- Do not translate. --

item15000/item

!-- Do not translate. --

item30000/item

!-- Do not translate. --

item60000/item

!-- Do not translate. --

item600000/item

!-- Do not translate. --

item1800000/item

!-- Do not translate. --

item-1/item

/string-array

要是是系統(tǒng)屏幕永不超時(shí)也就是將待機(jī)時(shí)間設(shè)為“-1”,這是最關(guān)鍵的一點(diǎn);

對(duì)應(yīng)英文版本:

android2.3\packages\apps\Settings\res\values-cs\arrays.xml

string-array name="screen_timeout_entries"

item msgid="3342301044271143016""15 sekund"/item

item msgid="8881760709354815449""30 sekund"/item

item msgid="7589406073232279088""1 minuta"/item

item msgid="7001195990902244174""10 minuty"/item

item msgid="5721688686241190620""30 minut"/item

item msgid="7156442995039264948""never sleep."/item

/string-array

對(duì)應(yīng)中文版本:

android\android_gingerbread_skdv210\packages\apps\Settings\res\values-zh-rCN\arrays.xml

string-array name="screen_timeout_entries"

item msgid="3342301044271143016""15 秒"/item

item msgid="8881760709354815449""30 秒"/item

item msgid="7589406073232279088""1 分鐘"/item

item msgid="7001195990902244174""10 分鐘"/item

item msgid="5721688686241190620""30 分鐘"/item

item msgid="7156442995039264948""從不休眠"/item

/string-array

android中如何獲取超時(shí)時(shí)長(zhǎng)的異常

android獲取超時(shí)時(shí)長(zhǎng)的異常方式如下:設(shè)置超時(shí)機(jī)制

client.getParams().setIntParameter(

HttpConnectionParams.SO_TIMEOUT, TIME_OUT_DELAY); // 超時(shí)設(shè)置

client.getParams().setIntParameter(

HttpConnectionParams.CONNECTION_TIMEOUT, TIME_OUT_DELAY);// 連接超時(shí)

這里設(shè)置了兩種超時(shí),第一種是請(qǐng)求超時(shí),第二種時(shí)連接超時(shí)。

當(dāng)向服務(wù)器發(fā)出請(qǐng)求后,請(qǐng)求和服務(wù)器建立socket連接,但是很長(zhǎng)時(shí)間內(nèi)都沒有建立socket連接,這就時(shí)第一種請(qǐng)求超時(shí),這種情況主要發(fā)生在請(qǐng)求了

一個(gè)不存在的服務(wù)器。超時(shí)之后,會(huì)拋出InterruptedIOException異常。

Timeout for blocking operations. The argument value is specified in

milliseconds. An InterruptedIOException is thrown if this timeout

expires.

當(dāng)前標(biāo)題:android超時(shí),手機(jī)一直請(qǐng)求超時(shí)
標(biāo)題URL:http://jinyejixie.com/article48/dsseeep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站排名、企業(yè)建站、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
昌吉市| 西昌市| 安平县| 虞城县| 舞钢市| 新兴县| 桐梓县| 文成县| 昌黎县| 铜川市| 宁海县| 南木林县| 东乌| 沂南县| 芒康县| 延寿县| 阳春市| 社会| 正阳县| 弥渡县| 交城县| 晋江市| 南充市| 彭水| 磐石市| 石台县| 郧西县| 永春县| 繁昌县| 华容县| 东台市| 新民市| 晋城| 萝北县| 额尔古纳市| 宁陵县| 巴彦县| 龙陵县| 宁乡县| 苏尼特左旗| 金坛市|