0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 42

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

16.06.2015, 13:20. Показов 5879. Ответов 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 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru