Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
7 / 7 / 3
Регистрация: 02.07.2012
Сообщений: 120

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

07.07.2012, 17:48. Показов 942. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно, чтобы программа могла принимать сообщения WM_QUERYENDSESSION и WM_ENDSESSION и на них реагировать. Как это осуществить в консольной программке? И если программа будет отсылать запросы серверу не последовательно в едином потоке, а в нескольких одновременно, то программа будет работать в несколько раз быстрее?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2012, 17:48
Ответы с готовыми решениями:

MFC отлов сообщений
Привет. Подскажите, а можно ли в MFC сделать в окне отлов сообщения как в WIN API (в MFC есть карта сообщения, в WIN API на прямую с...

Отлов сообщений в чужом приложении
Доброго. Начал изучать cpp, но так как имхо быстрое изучение - практика то решил чо нить написать... Так как все самое нужное и...

Система личных сообщений. Вывод списка сообщений.
Доброе время суток! Возникла проблема с почтой, а конкретно не могу вывести всю переписку сообщений и входящих и исходящих с...

7
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
07.07.2012, 17:53
Romadzao
Потоки очень интересная тема,поэтому не правильное применение только усугубит ситуацию,рекомендую вам почитать про синхронизацию и асинхронизацию..а так же про процессы...

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

Добавлено через 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(), вроде создаёт дочерние процессы (то, что мне и надо), кто знает как ей пользоваться?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
08.07.2012, 01:24
Цитата Сообщение от Romadzao Посмотреть сообщение
Я нашел функцию fork()
ЕМНИП эта функция для *nix

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

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

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

Добавлено через 2 часа 36 минут
128 человек тут было, и так никто по делу не ответил. Ну как так сделать, чтобы было много-много потоков, из мэйна в них посылалась бы переменная, а в тех потоках был бы цикл, и всё что мне надо - чтобы цикл выполнялся только тогда, когда приходит переменная! Даже возвращать в мэйн необязательно! Это же так просто для людей, у которых под ником "Эксперт C++" написано!
0
7 / 7 / 3
Регистрация: 02.07.2012
Сообщений: 120
10.07.2012, 00:16  [ТС]
Целых два дня прошло с появления моего расплывчатого неясного вопроса, один день с появления чёткого и понятного. Даю вам время до пятницы . Ну ответьте кто-нибудь, я ведь так ничего не смог налуркать. Вот если бы это не моя тема была, а чужая, я бы точно помог человеку.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.07.2012, 01:04
ты лучше расскажи, как работает то, что у тебя уже есть, и что не так, как ты хочешь. тогда найдутся желающие тебе помочь, я думаю. а за тебя делать где время взять?
0
7 / 7 / 3
Регистрация: 02.07.2012
Сообщений: 120
11.07.2012, 01:40  [ТС]
За меня делать ничего не требуется, всего лишь подтолкнуть на путь истинный.
Цитата Сообщение от 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 минуту
И получилось намноооого проще, чем я ожидал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2012, 01:40
Помогаю со студенческими работами здесь

Как запретить вывод системных сообщений и вместо системных сообщений открыть Form1?
как запретить ВЫВОД СИСТЕМНЫХ СООБЩЕНИЙ И ВМЕСТО СИСТЕМНЫХ СООБЩЕНИЙ ОТКРЫТЬ ФОРМУ &quot;FORM1&quot;

Отлов ошибок
В Pascal ABC можно ошибки отловить с помощью try except, есть ли подобная конструкция в Turbo Pascal?

Отлов исключений
короче открываю запускаю программу , работает она нормально. Затем открываю фаил через прогу. И вылетает исключение про pointer и ошибку...

Отлов ошибок
Привет, помогите пожалуста сделать в программе отлов ошибок с конкретным описанием, особенно если файл пустой и сделать открытие из файла...

Отлов событий
Всем привет. Ради интереса решил разобраться в программировании в QT и никак не могу разобраться с отловом событий. У меня есть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru