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

Работа с потоками - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить значение величины,содержащей несколько однотипных сум. Для вычисления сумм написать функцию пользователя http://www.cyberforum.ru/cpp-beginners/thread623037.html
Помогите с кодом пожалуйста #include "stdafx.h" #include "iostream" using namespace std; double summa(int k, int m, int a, int b , int c) { double s=0; int i=0; for( i=k; i<m; i++); {
C++ Шаблонные функции Читал у Праты про шаблонные функции, и везде они описаны наподобие template <typename Any> void Swap (Any &a, Any &b) А если нужно вернуть какое-либо значение, то как записывать шаблон? Ведь void это не для возврата на сколько я понял. Можно ли так описать шаблон: template <typename Any> Any Swap (Any &a, Any &b) http://www.cyberforum.ru/cpp-beginners/thread623035.html
Типы double и real C++
Уважаемые форумчане, подскажите пожалуйста, отличается ли тип double от real в Паскале? Заранее спасибо
C++ Проверка конец файла или нет
Подскажите пожалуйста если читаю числа типа int и не знаю когда конец файла как это проверять?Заранее спасибо.Если можно пример.
C++ Проблемы с текстом в потоках http://www.cyberforum.ru/cpp-beginners/thread623006.html
В мэйне текстовая глобальная переменная static char Pass(20) меняется в цикле по принципу aaaaa, baaaa, caaaa и так по алфавиту. И так то оно хорошо работает, а вот если сделать два потока, которые используют Pass но при этом не изменяют, то в таком случае 4 последних буквы в слове не меняются, а первая буква либо r, либо p, либо :, при том что ":" в алфавите перебора и близко нет. Возефак???...
C++ Указатели Простой пример по Указателям в Turbo c++ Можете несколько вариантов) Тока простые. а то я не смогу училке обяснить. подробнее

Показать сообщение отдельно
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
13.07.2012, 17:12  [ТС]     Работа с потоками
я добавил мьютексы пока лишь в функцию connect,файлы создаются,однако сохраняются не так,как надо.То есть,в файле apple_rss.xml вдруг новсти с kp.ua,то есть перемешалось всё
оказывается он использует один и тот же буфер и всё туда записывает,то есть с первым файлом всё нормально,а вот в случае со вторым и третьим беда-в них записыается содержимое предыдущих файлов
вот на всякий случай код
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "StdAfx.h"
 
//-----------------------------------------------------------------------
//функция для установления соединения,получения данных и записи их в файл
//-----------------------------------------------------------------------
 
//объявляем буфер, для хранения возможной ошибки, размер определяется в самой библиотеке
static char errorBuffer[CURL_ERROR_SIZE];
//объявляем буфер принимаемых данных
static string buffer;
 
HANDLE hMutex;
 
//функция обратного вызова
static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
  //переменная - результат, по умолчанию нулевая
  int result = 0;
 
  if (buffer != NULL)
  {
    //добавляем к буферу строки из data, в количестве nmemb
    buffer->append(data, size * nmemb);
    //вычисляем объем принятых данных
    result = size * nmemb;
  }
  //вовзращаем результат
  return result;
}
 
 
 
void connect(PVOID pvoid)
{
    PINFO pinfo = (PINFO)pvoid;
 
setlocale(0,"");
 
    hMutex = CreateMutex(NULL,true,"Mutex");
 
    WaitForSingleObject(hMutex,INFINITE);
 
 
  //необходимые CURL объекты
  CURL *curl;
  CURLcode result;
  //инициализируем curl
  curl = curl_easy_init();
 
  //проверяем результат инициализации
  if (curl)
    {
 
        curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
      //задаем все необходимые опции
      curl_easy_setopt(curl, CURLOPT_URL,pinfo->url);
     
      curl_easy_setopt(curl, CURLOPT_HEADER, 0);         // не возвращает заголовки
      curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
      curl_easy_setopt(curl, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
 
      curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
      curl_easy_setopt(curl, CURLOPT_TIMEOUT, 120);        // таймаут ответа
      curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа
 
 
      //указываем функцию обратного вызова для записи получаемых данных
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
      //указываем куда записывать принимаемые данные
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
      //запускаем выполнение задачи
      result = curl_easy_perform(curl);
 
      //проверяем успешность выполнения операции
      if (result == CURLE_OK)
        {
        string fn(pinfo->NameOfFile);
        ofstream f(fn.c_str());
        if(!f) { MessageBox(pinfo->hwnd, "Can't create file","Error",MB_OK);}
        else   { f<<buffer<<endl; f.close();}
        }
  }
    else
    //выводим сообщение об ошибке
    MessageBox(pinfo->hwnd, "Can't connect","Error",MB_OK);
     
  //завершаем сессию
  curl_easy_cleanup(curl);
 
  ReleaseMutex(hMutex);
 
  _endthread();
 
 
}
Добавлено через 1 час 40 минут
Я исправил предыдущую ошибку,теперь борюсь с двумя:первая-разделение потоков,мне нужно,чтобы сначала завершились потоки для загрузки данных,а лишь потом запустились потоки для открытия файлов
я использовал объект Event,однако возникла проблема,что один файл не открывается,то есть два уже есть,они открываются,а один какой-нибудь-нет
Проблема №2:не выводятся строки в списках,хотя в структуре NEWS они есть
 
Текущее время: 08:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru