Читаем Programming with POSIX® Threads полностью

58 strncpy (request->prompt, prompt, 32);

59 else

60 request->prompt[0] = '\0';

61 if (operation == REQ_WRITE && string != NULL)

62 strncpy (request->text, string, 128);

63 else

64 request->text[0] = '\0';

65

66 /*

67 * Add the request to the queue, maintaining the first and

68 * last pointers.

69 */

70 if (tty_server.first == NULL) {

71 tty_server.first = request;

72 tty_server.last = request;

73 } else {

74 (tty_server.last)->next = request;

75 tty_server.last = request;

76 } 77

78 /*

79 * Tell the server that a request is available.

80 */

81 status = pthread_cond_signal (&tty_server.request);

82 if (status != 0)

83 err_abort (status, "Wake server");

84

85 /*

86 * If the request was "synchronous", then wait for a reply.

87 */

88 if (sync) {

89 while (!request->done_flag) {

90 status = pthread_cond_wait (

91 &request->done, &tty_server.mutex);

92 if (status != 0)

93 err_abort (status, "Wait for sync request");

94 }

95 if (operation == REQ_READ) {

96 if (strlen (request->text) > 0)

97 strcpy (string, request->text);

98 else

99 string[0] = '\0*;

100 }

101 status = pthread_cond_destroy (&request->done);

102 if (status != 0)

103 err_abort (status, "Destroy request condition");

104 free (request);

105 }

106 status = pthread_mutex_unlock (&tty_server.mutex);

107 if (status != 0)

108 err_abort (status, "Unlock mutex");

109 }

Part 4 shows the thread start function for the client threads, which repeatedly queue tty operation requests to the server.

12-22 Read a line through the tty server. If the resulting string is empty, break out of the loop and terminate. Otherwise, loop four times printing the result string, at one-second intervals. Why four? It just "mixes things up" a little.

26-31 Decrease the count of client threads, and wake the main thread if this is the last client thread to terminate.

■ server.c part 4 client_routine

1 /*

2 * Client routine — multiple copies will request server.

3 */

4 void *client_routine (void *arg)

5 {

6 int my_number = (int)arg, loops;

7 char prompt[32];

8 char string[128], formatted[128];

9 int status;

10

11 sprintf (prompt, "Client %d> ", my_number);

12 while (1) {

13 tty_server_request (REQ_READ, 1, prompt, string);

14 if (strlen (string) == 0)

15 break;

16 for (loops = 0; loops < 4; loops++) {

17 sprintf (

18 formatted, "(%d#%d) %s", my_number, loops, string);

19 tty_server_request (REQ_WRITE, 0, NULL, formatted);

20 sleep (1);

21 }

22 }

23 status = pthread_mutex_lock (&client_mutex);

24 if (status != 0)

25 err_abort (status, "Lock client mutex");

26 client_threads--;

27 if (client_threads <= 0) {

28 status = pthread_cond_signal (&clients_done);

29 if (status != 0)

30 err_abort (status, "Signal clients done");

31 }

32 status = pthread_mutex_unlock (&client_mutex);

33 if (status != 0)

34 err_abort (status, "Unlock client mutex");

35 return NULL;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных