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

Использование CreateThread - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить, корректно ли расставлены круглые, фигурные и квадратные скобки http://www.cyberforum.ru/cpp-beginners/thread623801.html
Вот такая вот нехитрая вроде бы задача: Для введённой пользователем с клавиатуры строки (максимальная длина строки — 80 символов) программа должна определить, корректно ли расставлены круглые,...
C++ Как разбить на лексемы Не могу понять как разбить на лексемы, помагите если не сложно Вот участок кода: #include <iostream> #include <locale.h> #include <math.h> using namespace std; int main() {... http://www.cyberforum.ru/cpp-beginners/thread623794.html
Присвоение указателю члену класса нового адреса, ошибка компиляции C++
Идея в том, чтобы хранить в отдельном списке объекты типа B и передавать в объект типа A указатель на объект B из списка. Допустим есть следующий код: class A { public: void SetB(const...
C++ Как скрыть файл .dll
Я бы хотел знать как можно скрыть файл .dll ?
C++ передача аргументов http://www.cyberforum.ru/cpp-beginners/thread623769.html
Здравствуйте,объясните пожалуйста,на примерах кода,что означает передача аргументов по ссылке, по значению,передача копий аргументов?
C++ Алгоритм(Найти максимальное совершенное число, которое в то же время меньше введенного N) Найти максимальное совершенное число, которое в то же время меньше введенного N Справка: Число называется совершенным, если оно равно сумме всех своих делителей за исключением его самого НЕ... подробнее

Показать сообщение отдельно
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
15.07.2012, 23:19  [ТС]
вот часть WndProc,где создаются потоки
WndProc
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
int i;
 
        //------------------------------------------------
        //получаем данные
        //------------------------------------------------
 
        for(i = 0;i < THREADCOUNT;i++)
        {
            aThread[i] = CreateThread(
                NULL,0,
                (LPTHREAD_START_ROUTINE)connect,
                NULL,
                0,
                &ThreadId);
        }
 
        WaitForMultipleObjects(THREADCOUNT, aThread, true,INFINITE);
 
        for(i = 0;i < THREADCOUNT;i++)
            CloseHandle(aThread[i]);
 
        //------------------------------------------------
        //извлекаем из xml файла
        //------------------------------------------------
    
        for(i = 0;i < THREADCOUNT;i++)
        {
            aThread[i] = CreateThread(
                NULL,0,
                (LPTHREAD_START_ROUTINE)parsing,
                NULL,
                0,
                &ThreadId);
        }
    
        WaitForMultipleObjects(THREADCOUNT, aThread, true,INFINITE);
 
        for(i = 0;i < THREADCOUNT;i++)
            CloseHandle(aThread[i]);

вот функция
connect
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
#include "StdAfx.h"
 
//-----------------------------------------------------------------------
//функция для установления соединения,получения данных и записи их в файл
//-----------------------------------------------------------------------
 
typedef struct
{
    string buffer;
    char errorBuffer[CURL_ERROR_SIZE];
    CURL *curl;
    CURLcode result;
}DATA, *PDATA;
 
//функция обратного вызова
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;
}
 
 
DWORD WINAPI connect(LPVOID pvoid)
{
    PINFO pinfo = (PINFO)pvoid;
 
    DWORD dwTlsIndex = TlsAlloc();
 
    TlsSetValue(dwTlsIndex,GlobalAlloc(GPTR,sizeof(DATA)));
 
    PDATA pdata;
 
    pdata = (PDATA)TlsGetValue(dwTlsIndex);
 
    //инициализируем curl
    pdata->curl = curl_easy_init();
 
    //проверяем результат инициализации
  if (pdata->curl)
    {
    curl_easy_setopt(pdata->curl, CURLOPT_ERRORBUFFER, pdata->errorBuffer);
      //задаем все необходимые опции
      curl_easy_setopt(pdata->curl, CURLOPT_URL,pinfo->url);
     
      curl_easy_setopt(pdata->curl, CURLOPT_HEADER, 0);         // не возвращает заголовки
      curl_easy_setopt(pdata->curl, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
      curl_easy_setopt(pdata->curl, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
 
      curl_easy_setopt(pdata->curl, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
      curl_easy_setopt(pdata->curl, CURLOPT_TIMEOUT, 120);        // таймаут ответа
      curl_easy_setopt(pdata->curl, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа
 
 
      //указываем функцию обратного вызова для записи получаемых данных
      curl_easy_setopt(pdata->curl, CURLOPT_WRITEFUNCTION, writer);
      //указываем куда записывать принимаемые данные
      curl_easy_setopt(pdata->curl, CURLOPT_WRITEDATA, &(pdata->buffer));
      //запускаем выполнение задачи
      pdata->result = curl_easy_perform(pdata->curl);
 
      //проверяем успешность выполнения операции
      if (pdata->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<<pdata->buffer<<endl; f.close();}
        }
  }
    else
    {
    //выводим сообщение об ошибке
    MessageBox(pinfo->hwnd, "Can't connect","Error",MB_OK);
    return false;
    }
     
  //завершаем сессию
  curl_easy_cleanup(pdata->curl);
 
  TlsFree(dwTlsIndex);
 
  return true;
}

а вот
parsing
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
#include "StdAfx.h"
 
extern NEWS source[15];
 
typedef struct
{
    TiXmlDocument *doc;
}DATA, *PDATA;
 
DWORD WINAPI parsing(PVOID pvoid)
{
    PINFO pinfo;
 
    pinfo = (PINFO)pvoid;
 
    DWORD dwTlsIndex = TlsAlloc();
 
    TlsSetValue(dwTlsIndex,GlobalAlloc(GPTR,sizeof(DATA)));
 
    PDATA pdata;
 
    pdata = (PDATA)TlsGetValue(dwTlsIndex);
 
    int Start  =  pinfo->Amount;
    int Finish = pinfo->Amount + 5;
 
    string temp(pinfo->NameOfFile);
 
    pdata->doc = new TiXmlDocument(temp.c_str());
 
    bool LoadOK = pdata->doc->LoadFile();
 
    if(!LoadOK)
    {
        string error("Can't open file ");
        error += temp;
        MessageBox(pinfo->hwnd, error.c_str(), "Error",MB_OK);
        return false;
    }
 
    TiXmlElement *rss = pdata->doc->FirstChildElement("rss");
 
    TiXmlElement *channel = rss->FirstChildElement("channel");
 
    TiXmlElement *item = channel->FirstChildElement("item");
 
    MessageBox(pinfo->hwnd,"Start parsing","",MB_OK);
 
    while(Start < Finish)
    {
        TiXmlElement *title = item->FirstChildElement("title");
 
        wchar_t Temp[1024];
        char AnsiTemp[1024];
 
        MultiByteToWideChar(CP_UTF8,0,title->GetText(),
            -1,Temp,sizeof(Temp));
        WideCharToMultiByte(CP_ACP,0,Temp,-1,AnsiTemp,
            sizeof(AnsiTemp),NULL,NULL);
 
        source[Start].title = new char[strlen(AnsiTemp)+1]; 
        source[Start].title = AnsiTemp;
 
        TiXmlElement *link = item->FirstChildElement("link");
 
        source[Start].link = new char[strlen(link->GetText())+1];
        source[Start].link = const_cast<char *>(link->GetText());
 
        MessageBox(pinfo->hwnd,source[Start].link,"",MB_OK);
 
        Start++;
 
        item = item->NextSiblingElement();
    }
 
    TlsFree(dwTlsIndex);
 
    return true;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru