Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2011, 01:58   #11
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2Сыроежка
Цитата:
Во-первых, информация о размере массива может содержаться в самом массиве.
эту информацию можно поместить только в первый элемент, чего мы тут не наблюдаем

Цитата:
Во-вторых, может быть какая-нибудь глобальная переменная, содержащая размер массива
еще лучше. посмотрел бы я на тебя, используя различные memcpy, strncpy, информация для которых хранится в каких-то глобальных переменных. опять же, лишние проблемы с потоками

Цитата:
В-третьих, эттот масив может иметь фиксированную длину, которая объявлена где-нибудь в заголовочном файле как манифестная константа.
тогда и указатель на массив нужно объявить в этом файле

сам же где то распинался, объявили входящий указатель как указатель на const, значит данные нельзя модифицировать. тут точно так же. не передали размер, значит считаем, что это не массив. другое дело, если ты пишешь быдлокод, который никто кроме тебя не читает, пиши как хочешь, никто ничего не запрещает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 22.07.2011 в 02:02.
pproger вне форума Ответить с цитированием
Старый 22.07.2011, 01:58   #12
btf
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 25
По умолчанию

Массив у меня фиксированной длины - 64.
Но, парни, давайте, пожалуйста, вернемся к рассматриваемой проблеме: ответ на 3ий вопрос из первого сообщения.
Я так понимаю, что ситуация, происходящая в программе, ясна. Если нет - пишите, я поясню.
btf вне форума Ответить с цитированием
Старый 22.07.2011, 12:08   #13
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> ответ на 3ий вопрос

я ж уже написал, повторюсь:

Цитата:
оставить код как есть, запускайте 50 потоков, только вместо эхо-цикла крутите пустой цикл, который будет ожидать данных для посылки клиенту (ну и принимать данные от клиента тоже полезно иногда).
или нужно ещё подробней?

ОК, я бы делал так:

— создаём глобальную структуру, в которую помещаются данные для отсылки всем клиентам.
— когда нужно что-то передать, заполняем данные в этой структуре, и все потоки оповещаются (через Event, который просматривается в цикле потока), что есть данные для отсылки.
— после отсылки каждый поток выставляет свой Event, признак того, что глобальные данные этим потоком обработаны.
— отдельный поток следит за этими последними Envent-ами, и когда все выставленны, считется, что данные отправлены всем, и их можно удалять (подготавливать новые для отправки).

Слишком сложно? Тогда индусский подход:

— создаём отдельный поток, который по массиву сокетов в цикле отправляет всем сообщение.

Если сокеты не ассинхронные, то горячий привет из Индии. Но и с ассинхронными сокетами может быть беда, если массив клиентстких сокетов часто обновляется (люди часто входят-выходят из чата).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.07.2011, 16:58   #14
btf
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 25
По умолчанию

Вопрос состоит в том, как сделать отсылку сообщения сразу всем потокам?
btf вне форума Ответить с цитированием
Старый 28.12.2012, 06:11   #15
werasaimon
 
Регистрация: 02.12.2011
Сообщений: 3
По умолчанию на щет массива рассылки

Код HTML:
#include <iostream>
#include <windows.h>
#include <winsock2.h>
#include<stdio.h>
#include <string>

using namespace std;






SOCKET massiv_socket[1000];
int num_massiv_socket = 0;





DWORD WINAPI SexToClient(LPVOID client_socket)
{
	        SOCKET my_sock;
	        my_sock=((SOCKET*) client_socket)[0];

		    char buff[20*1024];
		    int bytes_recv;

		    int Numer = num_massiv_socket - 1;

		    while( (bytes_recv = recv(my_sock,&buff[0],sizeof(buff),0)) && bytes_recv !=SOCKET_ERROR)
		    {



                 
		               
		    	       for (int i = 0; i < num_massiv_socket; i ++) {
		    	           if (massiv_socket[i] != my_sock)
		    	          send(massiv_socket[i], &buff[0] , bytes_recv,0);
		    	       }

		    	       Sleep(1);
		    }


		    num_massiv_socket--;
		    closesocket(my_sock);
		    return 0;
}




int main() {


	// unsigned long flag = true;

   //char buff[256];
    WSAData ws;
	WSAStartup(0x0202 ,&ws );


	SOCKET mysocket;
	mysocket = socket(AF_INET , SOCK_STREAM , 0);

	sockaddr_in local_addr;
	local_addr.sin_family = AF_INET;
	local_addr.sin_port = htons(666);
	local_addr.sin_addr.S_un.S_addr = 0;





	//int i = 1;
	//setsockopt(mysocket,SOL_SOCKET,SO_REUSEADDR,(char *)&i,sizeof (i));

	if(bind(mysocket , (sockaddr*)&local_addr , sizeof(local_addr)))
	{
       closesocket(mysocket);
       WSACleanup();
	}


	listen(mysocket , 0x100);



	SOCKET client_socket;
	sockaddr_in client_addr;
	int client_addr_size=sizeof(client_addr);



	 while((client_socket=accept(mysocket, (sockaddr *)
	            &client_addr, &client_addr_size)))

	 {

         massiv_socket[num_massiv_socket] = client_socket;
         num_massiv_socket++;

              DWORD thID;
              CreateThread(NULL,0,SexToClient,
                      &client_socket,0,&thID);


		// _beginthread(thread_proc , 0  , &client_socket);

	 }


	closesocket(mysocket);
	WSACleanup();

	return 0;
}
werasaimon вне форума Ответить с цитированием
Старый 28.12.2012, 06:15   #16
werasaimon
 
Регистрация: 02.12.2011
Сообщений: 3
По умолчанию

ето метод катит только для чата
если игра то больше двоих клиентов будут путать систему
потому что два три потока будут давать данные в тот же клиент
и биты перепутаются
werasaimon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чат через winsock Jasper92 Помощь студентам 0 23.11.2010 14:48
Многопоточный сервер FAiver Работа с сетью в Delphi 18 31.03.2008 08:51
многопоточный сервер мандарин Работа с сетью в Delphi 6 24.04.2007 07:22
Многопоточный Ping Квэнди Работа с сетью в Delphi 0 18.12.2006 15:01