22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
1

Создание потока в программе

05.04.2010, 15:06. Показов 2029. Ответов 8
Метки нет (Все метки)

Доброго всем дня, Товарищи у меня вопрос такого характера, есть чат (TServerSocket и TClientSocket), принимаю от клиента сообщение и необходимо его обработать, тем самым необходимо создание потока для решения данного вопроса, чтобы не забивать прослушка порта на новые сообщения. в классах я не бельме)). просьба расписать каким образом создать данный поток.

С уважением, Сергей!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2010, 15:06
Ответы с готовыми решениями:

Создание нового потока из работающего потока
насколько это корректно? вроде всё нормально работает и именно так как задумывалось, но вопрос...

2 потока в одной программе
На форме есть 2 кнопки, и каждая из них должна работать в разных потоках, подскажите как...

Два потока в одной программе
В универе лабу задали сделать прогу, которая выполняет 2 потока. При нажатии button1 выполняется...

Вывод в программе потока RTSP
Есть поток RTSP подскажите код , как вывести его в окне C# windows formВы так много сообщили, что...

8
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
06.04.2010, 08:52 2
Цитата Сообщение от GaFBich Посмотреть сообщение
принимаю от клиента сообщение и необходимо его обработать, тем самым необходимо создание потока для решения данного вопроса, чтобы не забивать прослушка порта на новые сообщения
а кто вам сказал что порт забивается? и почему вы думаете, что разработчики данных компонентов сами не позаботились о мягкой обработке запросов?
в общем опишите проблему, с которой столкнулись, если таковая имеется.
0
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
06.04.2010, 10:41  [ТС] 3
Цитата Сообщение от AntonChik Посмотреть сообщение
а кто вам сказал что порт забивается? и почему вы думаете, что разработчики данных компонентов сами не позаботились о мягкой обработке запросов?
в общем опишите проблему, с которой столкнулись, если таковая имеется.
Проблема в том, что у меня один сервер и два клиента, создаю чат на основе компонентов TServerSocket & TClientSocket. Клиент при каждом соединении с Сервером передает ему строку c ник наймом, сервер записывает их в TListBox, при запросе клиента о находящихся пользователях в чате, получает список, но при этом сервер запускает цикл обработки данных от клиента, делает выборку из TListBox, исключая ник клиента который прислал запрос серверу, но при этом как он обрабатывает приходит сообщение от другого клиента, а сервер занят до сих пор обработкой предыдущего запроса, вот так и сообщение проподает, обработка находится прямо в прослушки сервера.

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
79
80
81
82
83
84
85
86
87
88
89
90
void __fastcall TForm1::ServerSocketClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
 
TDateTime d2;
AnsiString txt1, txt2, txt3;
int m=0;
int g=0;
 
 
 
 
txt1=Socket->ReceiveText();
      if(txt1.Pos("service:"))
        {
        for(m=9;txt1.Length()>= m;m++)
                {
                if (txt1[m]==':')
                {
                m++;
                Memo3->Lines->Add(m);
                Memo3->Lines->Add(txt2);
                break;
                }
                txt2=txt2+txt1[m];
                }
 
 
                        for(m;txt1.Length()>=m;m++)
                        {
                        txt3=txt3+txt1[m];
                        }
                        Memo3->Lines->Add(txt3);
        for(g=0;ListBox1->Items->Count>g;g++)
                {
                ListBox1->Selected[g];
                        if(ListBox1->Items->Strings[g] == txt2)
                        {
                        ListBox1->Items->Strings[g] = txt3;
                        }
 
                }
        }
 
 
 
int ind, ind_client;
int index_sent;
AnsiString nickname;
    
    if (txt1.Pos("list:"))
        {
 
        nickname=listnick(txt1);
        Memo3->Lines->Add("èìÿ êëèåíòà " + nickname);
 
            for(ind=0;ind<ListBox1->Items->Count;ind++)
            {
                if(ListBox1->Items->Strings[ind]==nickname)
                {
                ind_client=ind;
 
                break;
                }
            }
            
            for(index_sent=0;index_sent<ListBox1->Items->Count;index_sent++)
            {
            if(index_sent!=ind_client)
                {
                ServerSocket->Socket->Connections[ind_client]->SendText("list:"+ListBox1->Items->Strings[index_sent]);
                                Sleep(10);
                }
            }
            ServerSocket->Socket->Connections[ind_client]->SendText("list:server");
        }
 
 
 
 
        if(ServerSocket->Active)
        {
                if(ServerSocket->Socket->Connected)
                {
 
                }
        }
Edit1->Text = txt2 + " & " + txt3;
Memo1->Lines->Add(d2.CurrentTime().TimeString()+ " : " +txt1+'\n');
}
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
06.04.2010, 12:16 4
а св-во ServerType какое выставлено?
0
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
06.04.2010, 13:27  [ТС] 5
Цитата Сообщение от AntonChik Посмотреть сообщение
а св-во ServerType какое выставлено?
stNonBlocking.
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
06.04.2010, 13:36 6
Цитата Сообщение от GaFBich Посмотреть сообщение
stNonBlocking.
ну а читали что это значит? не пробовали а противоположном режиме поработать?
0
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
06.04.2010, 14:16  [ТС] 7
Цитата Сообщение от AntonChik Посмотреть сообщение
ну а читали что это значит? не пробовали а противоположном режиме поработать?
попробую...
0
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
06.04.2010, 15:20  [ТС] 8
Цитата Сообщение от GaFBich Посмотреть сообщение
попробую...
По пробовал я изменить ServerType с stNonBlocking на stThreadBlocking, после этого сообщения между клиентом и сервером перестали ходить сообщения.

Прикладываю внизу программу целиком(исходник).
Вложения
Тип файла: rar chat.rar (440.2 Кб, 47 просмотров)
0
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
07.04.2010, 13:45  [ТС] 9
Товарищи, кто сможет оцените мой проект, он идет вложением в данном посте, так конечно плохо, нет практически комментариев, но хотелось бы разобраться в данном вопросе
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2010, 13:45
Помогаю со студенческими работами здесь

Два потока в одной программе
Две фунцкии одной программы оформить как две функции потока. После ввода значений запускаются два...

Создание потока из потока.
Надо создать поток 1, в нем создать поток 2, сам я жуткий дураг, немаловероятно что правильного в...

Создание потока
Ситуация такая: пишу игрушку - логическую, на шахматной доске (человек против компьютера)....

Создание потока
Доброй всем ночи! Перерыскал cplusplus.com, но так и не разобрался. Может ли кто-нибудь...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru