Форум программистов, компьютерный форум CyberForum.ru

Программа писатель / читатель - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
FlynnCarsen
 Аватар для FlynnCarsen
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 9
21.10.2011, 19:20     Программа писатель / читатель #1
Подскажите плиз, как организовать программу, которая читает/пишет с многопоточной обработкой. т.е. программа что то записывает в буфер обмена и что-то считывает. Работают параллельно. Буфер обмена - общий
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2011, 19:20     Программа писатель / читатель
Посмотрите здесь:

C++ Структура "Читатель библиотеки", не получается ввод времени
C++ Массив структур. Структура «Читатель»

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.10.2011, 01:49     Программа писатель / читатель #2
FlynnCarsen, вот примерчик накидал не большой, синхронизация критической секции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <windows.h>
DWORD WINAPI  ThreadRead(LPVOID);
DWORD WINAPI  ThreadWrite(LPVOID);
CRITICAL_SECTION  section;
char  buf[32]; // глобальный общий буфер
 
int main(){
   HANDLE threads[2];
   DWORD  id;
   int  cycle = 7;
 
   ZeroMemory(&section, sizeof(CRITICAL_SECTION));
   // инициализируем критическую секцию
   InitializeCriticalSection(&section);
 
   // создаём потоки
   threads[0] = CreateThread(NULL, 0u, ThreadWrite, (LPVOID)&cycle, 0u, &id);
   threads[1] = CreateThread(NULL, 0u, ThreadRead,  (LPVOID)&cycle, 0u, &id);
 
   // пусть основной поток подождёт пока писатель и читатель не закончут работу
   WaitForMultipleObjects(2u, threads, TRUE, INFINITE);
   // удаляем критическую секцию
   DeleteCriticalSection(&section);
   CloseHandle(threads[0]);
   CloseHandle(threads[1]);
   puts("finally work threads...");
   getchar();
   return 0;
}
 
// поток-читатель, читает буфер после того как в него будут записаны данные
DWORD WINAPI  ThreadRead(LPVOID param) {
   int cycle = *(int*) param;
   while(cycle--) {
        EnterCriticalSection(&section);
        puts(buf);
        LeaveCriticalSection(&section);
   }
   return 0;
}
 
/* поток-писатель, когда он пишет в буфер в это время поток-читатель не может читать данные
    только после того как в буфер запишутся данные */
DWORD WINAPI  ThreadWrite(LPVOID param) {
   SYSTEMTIME lt;
   int cycle = *(int*) param;
   int cnt = 0;
   while(cycle--) {
         EnterCriticalSection(&section);
         GetLocalTime(&lt);
         sprintf(buf, "%d). %02d:%02d", ++cnt, lt.wMinute, lt.wSecond);
         Sleep(1000u);  // задержка сделана для демонстрации синхронизации
         LeaveCriticalSection(&section);
   }
   return 0;
}
Yandex
Объявления
22.10.2011, 01:49     Программа писатель / читатель
Ответ Создать тему
Опции темы

Текущее время: 17:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru