2010-12-10 12 views
7

Im usando TClientSocket o TIdTCPClient de Indy (dependiendo del proyecto)Can Threads ¿Comparte el mismo socket de cliente?

Tengo un par de hilos de procesamiento de artículos cada uno, ya veces es necesario enviar datos a través del socket de cliente conectado. (Lectura de datos forman el zócalo no se utiliza en los hilos de procesamiento)

Básicamente mi pregunta es ...

  • es la posible?
  • ¿es "seguro"?

o debería

  • tener un socket de cliente por hilo o
  • algunos un poco de de clasificación/secciones críticas

Delphi-7 Indy-9

+1

BTW, Indy 9.x es obsoleto –

+0

yeh lo sé, (un poco delphi 7 también, supongo) está en la "lista" de cosas que hacer;) –

Respuesta

4

múltiples hilos puede leer y escribir en el mismo socket. Como cada vez que accept, extraerá la primera conexión en la cola de conexiones pendientes, creará un nuevo socket con las mismas propiedades de socket y asignará un nuevo descriptor de archivo para ese socket.

Solo hay un hilo por conexión aceptada.

Si está preguntando si puede escribir o leer varias veces en una conexión aceptada, necesitará funciones de bloqueo, por lo tanto, perderá los beneficios de paralelismo. Si desea enhebrar un proceso largo y luego escribir el resultado en el socket, use la sincronización para escribir en el orden correcto.

+0

Gracias por eso, también encontré esto que ayudó a http: // tangentsoft.net/wskfaq/intermediate.html#threadsafety –

+0

Además, 'accept' is thread-safe :) –

Cuestiones relacionadas