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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Дано натуральное число n http://www.cyberforum.ru/cpp-beginners/thread370294.html
Дано натуральное число n. Определить содержит ли квадрат числа n число m . Сколько раз? - помогите решить, начали недавно изучать C++, но я пока не могу понять
C++ Задание графа с помощью связного списка. Чтение из файла Здравствуйте! Помогите пожлуйста! Из файла нужно прочитать количество вершин и список смежности. В моем примере это: 5 2 3 4 0 1 3 4 5 0 1 2 5 0 1 2 5 0 2 3 4 0 http://www.cyberforum.ru/cpp-beginners/thread370281.html
Матрицы. Ввод и вывод в файл матрицу. C++
Прочитать из текстового файла элементы квадратной матрицы. Предусмотреть возможность работы с матрицами различной размерности. Повернуть относительно центрального элемента матрицу на 90 градусов по часовой стрелки. Вывести полученную матрицу в другой текстовый файл. Картинка с примером прилагается.
Предупреждение C++
Possible use of 'x' before definition in function main как это исправить? а то бред выдает в иксе если его в начале его обнуляю, то он и выходит нулем
C++ Где можно посмтреть все консольные функции? http://www.cyberforum.ru/cpp-beginners/thread370222.html
Нашел это http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=VS.85).aspx Но там, например, нет GetCursorPos, а значит что там не полная информация. В частности меня интересуют функции: 1) Узнать что за символ записан в консоли в точке x,y. 2) Узнать, не была ли нажата кнопка мыши. Тут наверно можно обойтись и средствами C++. Функция _kbhit не реагирует на нажатие кнопок мыши....
C++ Вывести четные числа из отрезка [2, 100] Напишите блок-схему и программу вывода всех четных чисел в диапазоне от 2 до 100 включительно. подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.10.2011, 01:49     Программа писатель / читатель
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;
}
 
Текущее время: 02:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru