Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42

Добавить многопоточность

16.06.2015, 13:20. Показов 5758. Ответов 82
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Собрал кое-какой проект (VS 2008, для работы под windows), хочу добавить туда многопоточность, написал кое-что для теста, главный поток отрабатывает нормально:
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
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;
 
char ip[14];
char text[256]={};
 
HANDLE logFile;
DWORD WrittenSize;
DWORD dwSize = sizeof(text);
 
void ThreadFunc(fstream &IP)
{
    logFile = CreateFileA("log.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    while (!IP.eof()){
        IP >> ip;
        wsprintfA(text, "%s%s", ip, "\r\n");
        SetFilePointer(logFile, 0, NULL, FILE_END);WriteFile(logFile, text, lstrlenA(text), &WrittenSize, NULL);
    }
}
 
int main()
{   
    fstream IP;
    IP.open("ips.txt");
    ThreadFunc(IP);
    IP.close();
    CloseHandle(logFile);
    system("pause");
}[/CODE][/SPOILER]
 
Пытаюсь запустить ThreadFunc() с помощью CreateThread, делаю примерно так:
[CODE]#include <process.h>
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;
 
char ip[14];
char text[256]={};
CRITICAL_SECTION cs, cs1;
 
HANDLE logFile;
DWORD WrittenSize;
DWORD dwSize = sizeof(text);
 
DWORD ThreadId;
HANDLE hThread;
 
DWORD WINAPI ThreadFunc(LPVOID lpParametr)
{
    logFile = CreateFileA("log.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    InitializeCriticalSection (&cs), InitializeCriticalSection (&cs1);
    while (!IP.eof()){
        EnterCriticalSection( &cs );
        IP >> ip;
        LeaveCriticalSection( &cs );
        wsprintfA(text, "%s%s", ip, "\r\n");
        EnterCriticalSection( &cs1 );
        SetFilePointer(logFile, 0, NULL, FILE_END);WriteFile(logFile, text, lstrlenA(text), &WrittenSize, NULL);
        LeaveCriticalSection( &cs1 );
    }
    DeleteCriticalSection (&cs), (&cs1);
}
 
int main()
{   
    fstream IP;
    IP.open("ips.txt");
    hThread = CreateThread(NULL, 0, ThreadFunc, &IP, 0, &ThreadId);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    //ThreadFunc(IP);// вместо ThreadFunc(IP) вставить createthread
    IP.close();
    CloseHandle(logFile);
    system("pause");
}
Получаю:
error C2065: 'IP' : undeclared identifier
error C2228: left of '.eof' must have class/struct/union

Подозреваю, что не правильно передаю массив строк IP и не могу сообразить, как передать его внутрь потоковой функции, уважаемые, подскажите, как это должно выглядеть?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2015, 13:20
Ответы с готовыми решениями:

C++ Многопоточность
Как сделать так, чтобы эта программа заработала? А то она мне вот что пишет: g++ test.cpp -o test -lpthread ./test ...

Многопоточность
Есть программа, суть которой считать с файла, записать в дерево, считать с дерева. Без многопоточности все работает норм. А вот с потоками...

Многопоточность
Столкнулся с проблемой, что не совсем понимаю, что такое многопоточность. С многозадачностью все понятно - несколько процессов выполняются...

82
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.06.2015, 13:57
Студворк — интернет-сервис помощи студентам
Ты присваиваешь элементу вектора (string) строку, которая находится в ip. ip после этого никак не меняется.
Зачем ты лезешь в многопоточность и клиент-серверные приложения если не знаешь как работает элементарная операция присваивания?
Не обижайся, но мне надоело объяснять тебе все эти элементарные основы.

Добавлено через 38 секунд
Цитата Сообщение от 163RUSland Посмотреть сообщение
мой косяк, сделал ip как string и заработало, не правильно присваивал
Если кроме этого ты ничего не менял, то заработать это никак не могло.
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
21.06.2015, 14:32  [ТС]
castaway, именно, я не верно расположил сперва, так работает
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
#define THREADS_NUMBER 2
 
int a = 0;
string ip;
struct MyStruct {
    size_t ips_count;
    vector <string> *ips;};
 
CRITICAL_SECTION cs;
 
DWORD WINAPI ThreadFunc(LPVOID lpParametr){
 
    MyStruct * p_ms = (MyStruct *)lpParametr;
 
    for ( ; ; ){
        EnterCriticalSection( &cs );
        if ( a < (p_ms->ips_count) ) {
            ip = ( *p_ms->ips )[a];
            cout << ip << "\n";
            //printf( "%s\n", ip );
            a++;
        } else break;
        LeaveCriticalSection( &cs );
        // далее работа сокета
    }
    
    return 0;
}
 
int main()
{   
    std::vector <std::string> ips;
    std::fstream fs_ips;
    fs_ips.open( "ips.txt" );
    while ( !fs_ips.eof() ) {
        char ip2[16];
        fs_ips >> ip2;
        ips.push_back( ip2 );
    }
    fs_ips.close();
 
    MyStruct ms;
    ms.ips_count = ips.size();
    ms.ips = &ips;
 
    //if ( THREADS_NUMBER > ips.size() ){THREADS_NUMBER = ips.size();}
    HANDLE * p_hThreads = new HANDLE [THREADS_NUMBER];
    InitializeCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        p_hThreads[i] = CreateThread(NULL, 0, ThreadFunc, &ms, 0, NULL);
    }
    WaitForMultipleObjects( THREADS_NUMBER, p_hThreads, TRUE, INFINITE );
    ips.clear();
    DeleteCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        CloseHandle(p_hThreads[i]);
    }
    system("pause");
}
не обижаюсь, я ж нуб совсем, это очевидно, новая проблема, если запускаю более чем в 1 поток, выводит все элементы как-надо, но не завершается.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.06.2015, 14:51
Это из-за break внути критической секции.
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 00:27  [ТС]
castaway, в 1 поток работает, если больше одного - вылетает после вывода всех элементов, если больше 100 - вылет на старте
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
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
#define THREADS_NUMBER 100
 
int a = 0;
struct MyStruct {
    size_t ips_count;
    vector <string> *ips;};
 
CRITICAL_SECTION cs;
 
DWORD WINAPI ThreadFunc(LPVOID lpParametr){
    MyStruct * p_ms = (MyStruct *)lpParametr;
    char ip[14];
    bool end = false;
    for ( ; ; ){
        EnterCriticalSection( &cs );
        string ip2 = ( *p_ms->ips )[a];
        strcpy( ip, ip2.c_str() );
        cout << ip << "\n";
        a++;
        if ( a >= (p_ms->ips_count) ) end = true;
        LeaveCriticalSection( &cs );
        if (end) break;
        }
        // далее работа сокета c полученной ip
    
    return 0;
}
 
int main()
{   
    vector <string> ips;
    fstream fs_ips;
    fs_ips.open( "ips.txt" );
    while ( !fs_ips.eof() ) {
        char ip2[16];
        fs_ips >> ip2;
        ips.push_back( ip2 );
    }
    fs_ips.close();
 
    MyStruct ms;
    ms.ips_count = ips.size();
    ms.ips = &ips;
 
    //if ( THREADS_NUMBER > ips.size() ){THREADS_NUMBER = ips.size();}
    HANDLE * p_hThreads = new HANDLE [THREADS_NUMBER];
    InitializeCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        p_hThreads[i] = CreateThread(NULL, 0, ThreadFunc, &ms, 0, NULL);
    }
    WaitForMultipleObjects( THREADS_NUMBER, p_hThreads, TRUE, INFINITE );
    DeleteCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        CloseHandle(p_hThreads[i]);
    }
    system("pause");
}
где я опять накосячил?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 01:19
Пока не знаю. Давай исправлять то что видно.
У IPv4 адреса какая максимальная длина в виде строки? Как ты думаешь? (с учётом точек)
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 09:47  [ТС]
castaway, 15 символов
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 10:32
Цитата Сообщение от 163RUSland Посмотреть сообщение
castaway, 15 символов
Да, плюс завершающий ноль для null-terminated строк.
У тебя в 22-й строке под него выделено всего 14-ть.
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 10:33  [ТС]
castaway, я пробовал больше, тоже самое
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 10:44
Цитата Сообщение от 163RUSland Посмотреть сообщение
castaway, я пробовал больше, тоже самое
В таких случаях не надо пробовать, надо быть уверенным.
Ок. Сейчас посмотрю что там еще..

Добавлено через 7 минут
Убери из структуры элемент ips_count, у вектора есть метод size(), который возвращает его размер. Получится что структура тебе не нужна вовсе, просто передавай в поток указатель на вектор.
Поправь и покажи код, так будет проще разобраться.
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 11:16  [ТС]
castaway,
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
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
#define THREADS_NUMBER 100
 
int a = 0;
 
CRITICAL_SECTION cs;
 
DWORD WINAPI ThreadFunc(LPVOID lpParametr){
    vector<string> * ips = (vector<string> *)lpParametr;
 
    char ip[32];
    bool end;
    for ( ; ; ){
        EnterCriticalSection( &cs );
        string ip2 = ( *ips )[a];
        strcpy( ip, ip2.c_str() );
        cout << ip << "\n";
        a++;
        if ( a >= ( ips->size() ) ) end = 1;
        LeaveCriticalSection( &cs );
        if (end) break;
        }
        // далее работа сокета c полученной ip
    
    return 0;
}
 
int main()
{   
    vector <string> ips;
    fstream fs_ips;
    fs_ips.open( "ips.txt" );
    while ( !fs_ips.eof() ) {
        char ip2[16];
        fs_ips >> ip2;
        ips.push_back( ip2 );
    }
    fs_ips.close();
 
    //if ( THREADS_NUMBER > ips.size() ){THREADS_NUMBER = ips.size();}
    HANDLE * p_hThreads = new HANDLE [THREADS_NUMBER];
    InitializeCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        p_hThreads[i] = CreateThread(NULL, 0, ThreadFunc, &ips, 0, NULL);
    }
    WaitForMultipleObjects( THREADS_NUMBER, p_hThreads, TRUE, INFINITE );
    DeleteCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        CloseHandle(p_hThreads[i]);
    }
    system("pause");
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 11:31
Проблема осталась без изменений?
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 11:33  [ТС]
castaway, ну да, проверяю код перед постом
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 12:13
Тебе необходимо проверять количество оставшихся адресов, перед входом в цикл внутри потока.
Что-то типа:
C++
1
2
3
4
    ...
    if ( a >= ips->size() ) return 1;
    for ( ; ; ){
...
Не проверял. Возлагаю эту ответственность на тебя.
1
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 12:28  [ТС]
castaway, это решило проблему вылета в конце вывода всех элементов, по-прежнему вылетает в сотню потоков
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
include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
#define THREADS_NUMBER 10
 
int a = 0;
 
CRITICAL_SECTION cs;
 
DWORD WINAPI ThreadFunc(LPVOID lpParametr){
    vector<string> * ips = (vector<string> *)lpParametr;
    char ip[32];
    bool end;
    EnterCriticalSection( &cs );
    if ( a >= ips->size() ) return 1;
    LeaveCriticalSection( &cs );
    for ( ; ; ){
        EnterCriticalSection( &cs );
        string ip2 = ( *ips )[a];
        strcpy( ip, ip2.c_str() );
        cout << ip << "\n";
        a++;
        if ( a >= ( ips->size() ) ) end = 1;
        LeaveCriticalSection( &cs );
        if (end) break;
        }
        // далее работа сокета c полученной ip
    
    return 0;
}
 
int main()
{   
    vector <string> ips;
    fstream fs_ips;
    fs_ips.open( "ips.txt" );
    while ( !fs_ips.eof() ) {
        char ip2[16];
        fs_ips >> ip2;
        ips.push_back( ip2 );
    }
    fs_ips.close();
 
    //if ( THREADS_NUMBER > ips.size() ){THREADS_NUMBER = ips.size();}
    HANDLE * p_hThreads = new HANDLE [THREADS_NUMBER];
    InitializeCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        p_hThreads[i] = CreateThread(NULL, 0, ThreadFunc, &ips, 0, NULL);
    }
    WaitForMultipleObjects( THREADS_NUMBER, p_hThreads, TRUE, INFINITE );
    DeleteCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        CloseHandle(p_hThreads[i]);
    }
    system("pause");
}
хотя не решило, return 1 внутри секции, но в пару потоков работает

Добавлено через 7 минут
сейчас сделал
C++
1
2
    Sleep(5000);
    WaitForMultipleObjects( THREADS_NUMBER, p_hThreads, TRUE, INFINITE );
заработало в 1к потоков норм, есть подозреие, что не успевали потоки запуститься все, как их уже встречал WaitForMultipleObjects
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 12:30
Та же проблема что и раньше. return внутри критической секции.

Добавлено через 35 секунд
Цитата Сообщение от 163RUSland Посмотреть сообщение
сейчас сделал
Это не выход. Убери Sleep.
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 12:36  [ТС]
castaway, убрал, подправил
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
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
#define THREADS_NUMBER 2
 
int a = 0;
 
CRITICAL_SECTION cs;
 
DWORD WINAPI ThreadFunc(LPVOID lpParametr){
    vector<string> * ips = (vector<string> *)lpParametr;
    char ip[32];
    bool end;
    EnterCriticalSection( &cs );
    if ( a >= ips->size() ) end = 1;
    LeaveCriticalSection( &cs );
    if (end) return 1;
    for ( ; ; ){
        EnterCriticalSection( &cs );
        string ip2 = ( *ips )[a];
        strcpy( ip, ip2.c_str() );
        cout << ip << "\n";
        a++;
        if ( a >= ( ips->size() ) ) end = 1;
        LeaveCriticalSection( &cs );
        if (end) break;
        }
        // далее работа сокета c полученной ip
    
    return 0;
}
 
int main()
{   
    vector <string> ips;
    fstream fs_ips;
    fs_ips.open( "ips.txt" );
    while ( !fs_ips.eof() ) {
        char ip2[16];
        fs_ips >> ip2;
        ips.push_back( ip2 );
    }
    fs_ips.close();
 
    //if ( THREADS_NUMBER > ips.size() ){THREADS_NUMBER = ips.size();}
    HANDLE * p_hThreads = new HANDLE [THREADS_NUMBER];
    InitializeCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        p_hThreads[i] = CreateThread(NULL, 0, ThreadFunc, &ips, 0, NULL);
    }
    WaitForMultipleObjects( THREADS_NUMBER, p_hThreads, TRUE, INFINITE );
    DeleteCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        CloseHandle(p_hThreads[i]);
    }
    system("pause");
}
пока всё так-же
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 12:43
Если условие в 22-й строке не сработает, то переменная end останется не инициализированной. Т.е. либо true, либо false. Как повезёт.
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 12:46  [ТС]
castaway, вон оно что, проблема не хочет меня покидать (
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
#define THREADS_NUMBER 2000
 
int a = 0;
 
CRITICAL_SECTION cs;
 
DWORD WINAPI ThreadFunc(LPVOID lpParametr){
    vector<string> * ips = (vector<string> *)lpParametr;
    char ip[32];
    bool end = 0;
    EnterCriticalSection( &cs );
    if ( a >= ips->size() ) end = 1;
    LeaveCriticalSection( &cs );
    if (end) return 1;
    for ( ; ; ){
        EnterCriticalSection( &cs );
        string ip2 = ( *ips )[a];
        strcpy( ip, ip2.c_str() );
        cout << ip << "\n";
        a++;
        if ( a >= ( ips->size() ) ) end = 1;
        LeaveCriticalSection( &cs );
        if (end) break;
        }
        // далее работа сокета c полученной ip
    
    return 0;
}
 
int main()
{   
    vector <string> ips;
    fstream fs_ips;
    fs_ips.open( "ips.txt" );
    while ( !fs_ips.eof() ) {
        char ip2[16];
        fs_ips >> ip2;
        ips.push_back( ip2 );
    }
    fs_ips.close();
 
    //if ( THREADS_NUMBER > ips.size() ){THREADS_NUMBER = ips.size();}
    HANDLE * p_hThreads = new HANDLE [THREADS_NUMBER];
    InitializeCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        p_hThreads[i] = CreateThread(NULL, 0, ThreadFunc, &ips, 0, NULL);
    }
    WaitForMultipleObjects( THREADS_NUMBER, p_hThreads, TRUE, INFINITE );
    DeleteCriticalSection (&cs);
    for( int i = 0; i < THREADS_NUMBER; ++i)
    {
        CloseHandle(p_hThreads[i]);
    }
    system("pause");
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.06.2015, 12:56
Трудно сказать в чём проблема, но у меня есть предположение что это из-за if (end) вне критической секции.. Но и в критическую секцию её помещать нельзя.
Честно говоря, мне не нравится логика твоей программы, а именно то, что потоков может быть больше чем IP адресов.
Предлагаю пересмотреть концепцию, и не создавать потоков больше, чем IP адресов.
0
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42
22.06.2015, 13:05  [ТС]
castaway, кол-во строк в файле не будет превышать кол-во потоков и не превышало, их я туда ложу вручную, но даже если и случиться, что потоков будет больше чем строк, то к тому времени уже реализую закомментированную строку, переделать придётся конечно немног //if ( THREADS_NUMBER > ips.size() ) THREADS_NUMBER = ips.size();
Мне не даёт покоя то, что пока работает Sleep, то всё работает, как начинается работа WaitForMultipleObjects, так вылетает, может их надо как-то по-другому ждать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2015, 13:05

Многопоточность
Здравствуйте! Прошу помочь реализовать многопоточность. Написал брут, когда запускаю в 1 поток, всё идёт ок, как запускаю в 2 и более всё...

Многопоточность
Если не ошибаюсь, данная вещь, которая описана ниже, называется многопоточностью. Чтобы в полной мере шарить в java надо затратить...

многопоточность в Qt
над qt первый день копчу, гуру подскажите как многопоточность здесь реализуется, omp или boost не подключаются?

многопоточность
Привет подскажите возможно ли отслеживать проникновение посторонних программ через много поточность?

Многопоточность
Вообщем есть код 1 потока - логин в аккаунт, но мне нужно сделать чтобы было сразу несколько потоков и проверялись несколько аккаунтов за...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru