Article View: es.comp.lenguajes.java
Article #25876Re: interrumpir llamada bloqueante a readLine()
From: Xavier Martínez i Puig
Date: Mon, 01 Mar 1999 00:00
Date: Mon, 01 Mar 1999 00:00
88 lines
2902 bytes
2902 bytes
Este es un mensaje multipartes en formato MIME.
--------------FA658BC58EEBADD0276E6995
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Guillermo Rodriguez Garcia escribi=F3:
> Buenas;
>
> Tengo un thread en el que estoy leyendo datos de un socket utilizando
> un stream de la clase BufferedReader y con la funci=F3n readLine(), alg=
o
> tal que as=ED:
>
> try
> {
> while (conectado)
> {
> // llamada bloqueante
> data =3D inputStream.readLine();
>
> // procesar los datos
> ....
> }
> }
> catch (Exception e)
> {
> System.err.println("Conexi=F3n perdida. Abortando...");
> }
> finally
> {
> inputStream.close();
> outputStream.close();
> socket.close();
> }
>
> Mi problema es que hay una situaci=F3n en la que estando el thread
> bloqueado en la llamada a readLine() esperando nuevos datos necesito
> sacarlo del bloqueo y matarlo, para lo cual he probado a hacer desde
> el otro thread:
>
> miThread.stop()
>
> que seg=FAn la documentaci=F3n genera una evento 'throwable' de tipo
> ThreadDeath, ejecuta el bloque finally y mata el thread, pero el
> problema es que todo esto no lo hace hasta que no retorna del
> readLine() y yo necesito interrumpir dicho readLine()
>
> =BFAlguna idea?
>
Prueba lo siguiente:
Antes de hacer el readLine comprueba que el Stream de lectura tenga
datos (o lo que es lo mismo est=E9 preparado para leer). El siguiente c=F3=
digo
te podr=EDa valer:
// ....
// Cede el procesador a otro proceso, si el stream est=E1 vac=EDo
while (!inputStream.ready()) this.yield();
data =3D inputStream.readLine();
// ....
--------------FA658BC58EEBADD0276E6995
Content-Type: text/x-vcard; charset=us-ascii;
name="xavier03.vcf"
Content-Transfer-Encoding: 7bit
Content-Description: Tarjeta de Xavier Mart�nez i Puig
Content-Disposition: attachment;
filename="xavier03.vcf"
begin:vcard
n:Mart�nez i Puig;Xavier
tel;home:96.286.38.93
tel;work:96.286.04.66 (ODEC)
x-mozilla-html:TRUE
org:ODEC;Inform�tica
adr:;;C/ Jacinto Benavente, 17;Gandia;Valencia;46700;Espa�a
version:2.1
email;internet:xavier03@bbvnet.com
title:Ingenier Inform�tic
fn:Xavi
end:vcard
--------------FA658BC58EEBADD0276E6995--
Technical Details
Message-ID:
<36DAC8BF.82D83506@bbvnet.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<36dabcb8.9941681@noticias.iies.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,4d0d5f32aca12cac X-Google-Attributes: gid1116f3,public From: Xavier Martínez i Puig <xavier03@bbvnet.com> Subject: Re: interrumpir llamada bloqueante a readLine() Date: 1999/03/01 Message-ID: <36DAC8BF.82D83506@bbvnet.com> X-Deja-AN: 450016156 References: <36dabcb8.9941681@noticias.iies.es> X-Accept-Language: es Content-Type: multipart/mixed; boundary="------------FA658BC58EEBADD0276E6995" Organization: ODEC Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java