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

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

16.06.2015, 13:20. Показов 6093. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru