libdap::MarshallerThread Class Reference

`#include <MarshallerThread.h>`

## Public Member Functions

int & | get_child_thread_count ()
pthread_cond_t & | get_cond ()
pthread_mutex_t & | get_mutex ()
void | increment_child_thread_count ()
void | start_thread (void *(*thread)(void *arg), int fd, char *byte_buf, unsigned int bytes_written)
void | start_thread (void *(*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written)

## Static Public Member Functions

static void * | write_thread (void *arg)
static void * | write_thread_part (void *arg)

## Detailed Description

Implement a multi-threaded data transmission sub-system for libdap. This class makes it fairly painless to send data using a child thread so that the main thread can be used to read the next chunk of data while whatever has been read to this point is sent over the wire.

This code is used by XDRStreamMarshaller and (soon) D4StreamMarshaller.

Definition at line 96 of file MarshallerThread.h.

## Member Function Documentation

## start_thread() [1/2]

void MarshallerThread::start_thread | ( | void *(*)(void *arg) | thread,
|  | int | fd,
|  | char * | byte_buf,
|  | unsigned int | bytes
| ) |  |

Write 'bytes' bytes from 'byte_buf' to the file descriptor 'fd'.

Definition at line 227 of file MarshallerThread.cc.

## start_thread() [2/2]

void MarshallerThread::start_thread | ( | void *(*)(void *arg) | thread,
|  | std::ostream & | out,
|  | char * | byte_buf,
|  | unsigned int | bytes
| ) |  |

Start the child thread, using the arguments given. This will write 'bytes' bytes from 'byte_buf' to the output stream 'out'

Definition at line 215 of file MarshallerThread.cc.

## write_thread()

void * MarshallerThread::write_thread | ( | void * | arg | ) |

static

This static method is used to write data to the ostream referenced by the ostream element of write_args. This is used by start_thread() and passed to pthread_create()

Note
  The write_args argument may contain either a file descriptor (d_out_file) or an ostream& (d_out). If the file descriptor is not -1, then use that, else use the ostream reference.

Definition at line 245 of file MarshallerThread.cc.

## write_thread_part()

void * MarshallerThread::write_thread_part | ( | void * | arg | ) |

static

This static method is used to write data to the ostream referenced by the ostream element of write_args. This is used by start_thread() and passed to pthread_create()

Note
  This differers from MarshallerThread::write_thread() in that it writes data starting after the four-byte length prefix that XDR adds to the data. It is used for the put_vector_part() calls in XDRStreamMarshaller.

Returns
  0 if successful, -1 otherwise.

Definition at line 302 of file MarshallerThread.cc.

The documentation for this class was generated from the following files:

- MarshallerThread.h
- MarshallerThread.cc