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

Отлов сообщений и многопоточность - C++

Восстановить пароль Регистрация
 
Romadzao
7 / 7 / 1
Регистрация: 02.07.2012
Сообщений: 120
07.07.2012, 17:48     Отлов сообщений и многопоточность #1
Мне нужно, чтобы программа могла принимать сообщения WM_QUERYENDSESSION и WM_ENDSESSION и на них реагировать. Как это осуществить в консольной программке? И если программа будет отсылать запросы серверу не последовательно в едином потоке, а в нескольких одновременно, то программа будет работать в несколько раз быстрее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2012, 17:48     Отлов сообщений и многопоточность
Посмотрите здесь:

отлов буквенной клавиши... C++
C++ Отлов рисунка
Отлов сообщения у ЛистБокса C++
C++ Отлов событий
Отлов функции с другой библиотеки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
07.07.2012, 17:53     Отлов сообщений и многопоточность #2
Romadzao
Потоки очень интересная тема,поэтому не правильное применение только усугубит ситуацию,рекомендую вам почитать про синхронизацию и асинхронизацию..а так же про процессы...

я бы помог по коду,только в с++ не так еще силен
Romadzao
7 / 7 / 1
Регистрация: 02.07.2012
Сообщений: 120
08.07.2012, 01:08  [ТС]     Отлов сообщений и многопоточность #3
Про потоки я прочитал, но ловить сообщения системы всё ещё понятия не имею как

Добавлено через 1 час 14 минут
Реализовать многопоточный код такого типа:
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
#include <windows.h>
#include <process.h>
#include <stdio.h>
 
HANDLE hEvent1, hEvent100;
static char Pass[256];
strcpy(Pass, "1234");
 
void q1( void* pParams ){
while( TRUE )
{ 
WaitForSingleObject( hEvent1, INFINITE ); // Ждёт команды
// Делает запрос серверу
}
}
 
void q100( void* pParams ){
while( TRUE )
{ 
WaitForSingleObject( hEvent1, INFINITE ); // Ждёт команды
// Делает запрос серверу
}
}
 
void main( void )
{
hEvent1 = CreateEvent( NULL, FALSE, TRUE, NULL ); // О параметрах ничего не знаю
// Тут ещё ивенты
hEvent100= CreateEvent( NULL, FALSE, TRUE, NULL );
_beginthread( q1, 0, NULL ); // Запускает поток
_beginthread( q100, 0, NULL ); 
while ( TRUE ){
// Делает вычисления с переменной pass
i = 1;
switch(i){
case 1:
i++;
SetEvent( hEvent1 );
break;
case 100:
i = 1;
SetEvent( hEvent100 );
break;
}
}
}
Как так расставить SetEvent( hEvent100 ); и WaitForSingleObject( hEvent1, INFINITE ); , чтобы всё заработало?

Добавлено через 12 минут
Вот почти этот же самый код, слегка доделанный:
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
#include <windows.h>
#include <process.h>
#include <stdio.h>
 
HANDLE hEvent1, hEvent2;
int a = 0; 
 
void q1( void* pParams ){
while( TRUE )
{ 
WaitForSingleObject( hEvent1, INFINITE );
printf("%s\n",a);
}
}
 
void q2( void* pParams ){
while( TRUE )
{ 
WaitForSingleObject( hEvent2, INFINITE );
printf("%s\n",a);
}
}
 
void main( void )
{
hEvent1 = CreateEvent( NULL, FALSE, FALSE, NULL );
hEvent2= CreateEvent( NULL, FALSE, FALSE, NULL );
_beginthread( q1, 0, NULL );
_beginthread( q2, 0, NULL );
while ( TRUE ){
a++;
int i = 1;
switch(i){
case 1:
i++;
SetEvent( hEvent1 );
break;
case 2:
i--;
SetEvent( hEvent2 );
break;
}
}
}
Как я понимаю, тут 3 потока: основной по очереди просит остальных двух выводить число, которое с каждым разом увеличивается. Вот только не работает почему-то. Доделайте кто-нибудь!

Добавлено через 4 часа 30 минут
Я нашел функцию fork(), вроде создаёт дочерние процессы (то, что мне и надо), кто знает как ей пользоваться?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.07.2012, 01:24     Отлов сообщений и многопоточность #4
Цитата Сообщение от Romadzao Посмотреть сообщение
Я нашел функцию fork()
ЕМНИП эта функция для *nix

Добавлено через 1 минуту
Цитата Сообщение от Romadzao Посмотреть сообщение
но ловить сообщения системы всё ещё понятия не имею как
нужно создавать приложение вин23, и если нужна консоль то AllocConsole в помощь
Romadzao
7 / 7 / 1
Регистрация: 02.07.2012
Сообщений: 120
08.07.2012, 17:26  [ТС]     Отлов сообщений и многопоточность #5
Модератор дорогой, скажи как так сделать, чтобы было много-много потоков, из мэйна в них посылалась бы переменная, а в тех потоках был бы цикл, и всё что мне надо - чтобы цикл выполнялся только тогда, когда приходит переменная! Даже возвращать в мэйн необязательно!

Добавлено через 3 минуты
И синхронизировать ничего не надо, ЕМНИПсС так даже легче писать и быстрее работать будет.

Добавлено через 13 часов 8 минут
Если перенести вверх мой псто, может кто-нибудь ответит

Добавлено через 2 часа 36 минут
128 человек тут было, и так никто по делу не ответил. Ну как так сделать, чтобы было много-много потоков, из мэйна в них посылалась бы переменная, а в тех потоках был бы цикл, и всё что мне надо - чтобы цикл выполнялся только тогда, когда приходит переменная! Даже возвращать в мэйн необязательно! Это же так просто для людей, у которых под ником "Эксперт C++" написано!
Romadzao
7 / 7 / 1
Регистрация: 02.07.2012
Сообщений: 120
10.07.2012, 00:16  [ТС]     Отлов сообщений и многопоточность #6
Целых два дня прошло с появления моего расплывчатого неясного вопроса, один день с появления чёткого и понятного. Даю вам время до пятницы . Ну ответьте кто-нибудь, я ведь так ничего не смог налуркать. Вот если бы это не моя тема была, а чужая, я бы точно помог человеку.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.07.2012, 01:04     Отлов сообщений и многопоточность #7
ты лучше расскажи, как работает то, что у тебя уже есть, и что не так, как ты хочешь. тогда найдутся желающие тебе помочь, я думаю. а за тебя делать где время взять?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 01:40     Отлов сообщений и многопоточность
Еще ссылки по теме:

C++ Отлов исключения переполнения буфера
C++ Отлов нажатия клавиш
Переполнение double и отлов ошибок C++

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

Или воспользуйтесь поиском по форуму:
Romadzao
7 / 7 / 1
Регистрация: 02.07.2012
Сообщений: 120
11.07.2012, 01:40  [ТС]     Отлов сообщений и многопоточность #8
За меня делать ничего не требуется, всего лишь подтолкнуть на путь истинный.
Цитата Сообщение от novi4ok Посмотреть сообщение
как работает то, что у тебя уже есть
1) Это брутфорс. Скорее для практики и ради процесса создания, нежели для пароля. Но ведь тут много не одобряющих такого.
2) Для разбирательств в чужом коде нужны действительно стальные.. нервы.
По этим причинам код выкладывать не буду.
То, что уже мною написано: вполне рабочий, но до ужаса однопотоковый брутфорсер. Что примечательно: из висуал студии работает, но медленно (120 паролей в минуту, мои внуки с такой скоростью пароль не увидят), а если построить релиз, то компилятор выдаёт ошибку, запуск извне скомпиленого отдебагеного ехешника тоже выдаёт ошибку. Но меня устраивает и запуск из VS.
Не лучше ли просто описать то,
Цитата Сообщение от novi4ok Посмотреть сообщение
что не так, как ты хочешь
А хочу я
Цитата Сообщение от Romadzao Посмотреть сообщение
так сделать, чтобы было много-много потоков, из мэйна в них посылалась бы переменная, а в тех потоках был бы цикл, и всё что мне надо - чтобы цикл выполнялся только тогда, когда приходит переменная! Даже возвращать в мэйн необязательно!
Для большей ясности напишу код образа того, чего хочу:
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
#include <windows.h>
#include <process.h>
#include <stdio.h>
HANDLE hEvent0, hEvent1;
 
void Thread0( void* pParams ){
while ( TRUE ){
WaitForSingleObject( hEvent0, INFINITE ); // Ждёт сигнала для начала работы
// Отправляет запрос серверу, ждёт ответа, обрабатывает результат
}}
 
void Thread1( void* pParams ){              // Подобных потоков должно быть много
while ( TRUE ){                            // Основная работа потока - ждать ответа сервера,
WaitForSingleObject( hEvent1, INFINITE ); // при этом ничего не делая.
// Код                                   // И пока большая часть потоков будет ждать, остальные
}}                                      // будут отправлять запросы или обрабатывать полученное.
                                       // Это всё ради скорости программы
void main(){
hEvent0 = CreateEvent( NULL, FALSE, FALSE, NULL );    // Понятия не имею, что эти параметры означают
hEvent1 = CreateEvent( NULL, FALSE, FALSE, NULL );   // Но что-то связанное с событиями
_beginthread( Thread0, 0, NULL );                   // Это начало потока 0
_beginthread( Thread1, 0, NULL );                  // Это начало потока 1
 
while( TRUE ){                                   // Основной цикл
// Тут подразумевается код, который генерирует тысячи текстовых переменных
int i = 0;
switch (i){  // Запускает нулевой поток или первый поочерёдно
            // Таких потоков я думаю сделать побольше
case 0:
SetEvent( hEvent0 );
i++;
break;
 
case 1:
SetEvent( hEvent1 );
i=0;
break;
}
}
}
Ну что-то вроде этого должно быть. С помощью событий нужно научится регулировать работу потоков. И спасибо novi4ok, не проигнорировал сие псто, как это сделали уже 177 человек!

Добавлено через 8 часов 56 минут
Это снова я, но на сей раз не с унылым нытьём и мольбами о помощи, а уже с кодом, которого я и хотел, но слегка корявый получился:
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
#include <windows.h>
#include <process.h>
#include <stdio.h>
#include <conio.h>
int t;
void Thread1( void* pParams ){
while (1){
    if(t == 1){
    printf("1\n");
    }}}
void Thread2( void* pParams ){
while (1){
    if(t == 2){
    printf("2\n");
    }}}
 
int main( void )
{
_beginthread( Thread1, 0, NULL );
_beginthread( Thread2, 0, NULL );
int i = 1;
while(true){
    switch(i){
    case 1:
        t = 1;
        i++;
        break;
 
    case 2:
        t = 2;
        i--;
        break;
 
    }
}
}
Так то оно по десять единиц и двоек выводит, но в бруте форсе будет работать как надо, ибо поток ответа от сервера каждый раз ждёт целых 0.38 секунды! За это время глобальная переменная успешно поменяется и цикл повторяться не будет.

Добавлено через 1 минуту
И получилось намноооого проще, чем я ожидал.
Yandex
Объявления
11.07.2012, 01:40     Отлов сообщений и многопоточность
Ответ Создать тему
Опции темы

Текущее время: 23:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru