Отговори на тема  [ 25 мнения ]  Отиди на страница 1, 2  Следваща
Работещ форум за CBuilder в България 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Работещ форум за CBuilder в България
Знам, че на този въпрос не му е тука мястото, но с риска да ме псувате, ще попитам:
Търся работещ форум за CBuilder в България. Преди седмица посетих нещо много интересно, обаче къде се дяна този URL, така е не го намерих. Ако някой знае нещо по въпроса, моля, нека прати някой линк. Tемите да са свързани с програмирането на CBuilder, а не за Visual C++, MFC, OWL или въобще C++.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пон Фев 28, 2005 12:42 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Виждал съм руски, ама Български .... не се сещам


Вто Мар 01, 2005 8:46 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Намерих нещо в Русия, ама е доста постно: http://www.sources.ru/builder/index.html


Вто Мар 01, 2005 5:20 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
http://www.bcbdev.ru


Вто Мар 01, 2005 9:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
10x, линка наистина си струва.


Сря Мар 02, 2005 7:54 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Тоя C++ Builder ми разказа играта последните 2 месеца. Тъкмо му намеря цаката и се отвори нова пропаст. Сега един дърварски проблем възникна дето се въртя няколко дена и не мога да намеря точното решение. Значи пуснах си TServerSocket като blocking connection. Заработи след дълги мъки стабилно и без да гърми с м-во нишки. Сега обаче не мога да намеря "пролука" в TServerSocket, така че от главната нишка на VCL да му давам "ишерет" че имам данни за изпращане. Приеамам данни от 250 клиента едновременно, та чак пушек се вдига, обаче не мога да намеря начин как да изпращам. Имам една таблица в главната форма от тип TStringGrid, с натискане на десния бутон на мишката се избира даден ред от таблицата, след което се отваря диалогова кутия, в която се попълват данни за изпращане. Е хубаво, ама как да направя така, че моята нишка да разбере, че имам данни за изпращане ? Не може да няма предвидена такава ситуация. Не искам да пиша излишни синхронизации с TEvent или подобните му обекти.


Пон Апр 18, 2005 2:08 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Нишката къв тип е? Седи и чака нещо да пристигне, или се върти непрекъснато, проверявайки буфера?


Пон Апр 18, 2005 2:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Нишката се блокирва от функцията WaitForData( CLIENT_WAIT_TIME )

Код:
   while( ! Terminated && ClientSocket->Connected ) // make sure connection is active
    {
        if( pStream->WaitForData(CLIENT_WAIT_TIME) ) // give the client CLIENT_WAIT_TIME seconds to start writing
        {
            try {
                // TWinSocketStream->Read() не генерира изключения !!!
                readBytes = pStream->Read( buffer, sizeof(buffer) );
                if( readBytes > 0 ) {
                    // Back again to Client ( echo )
                    pStream->Write( buffer, readBytes );

                    // Терминирам буфера с 0, за да стане валиден C низ, защото може и да не e :)
                    buffer[readBytes] = 0;

                    // Показвам получените данни като HEX
                    message = AnsiString( buffer );
                    Synchronize( myMemoReceiveHex );

                    // Показвам получените данни като string
                    message = ClientSocket->RemoteAddress + ":" + IntToStr(ClientSocket->RemotePort) + " - ";
                    message += AnsiString( buffer );
                    Synchronize( myMemoReceiveAscii );

                    message += "\n";
                    Synchronize( WriteToLogFile );

                    // now process the request
                    //...
                } else  {
                    // Защо трябва да затварям тук socket връзката ? Някаква причина
                    // да има ? Не съм прочел нищо от връзката, но значи ли това, че
                    // не съществува socket връзката.
//                  ::MessageBox(NULL,"Не съм прочел нищо от TWinSocketStream->Read()",szNameOfProgram,MB_OK|MB_ICONINFORMATION);
                    message = TDateTime::CurrentDateTime().DateTimeString();
                    message += ",ThreadID=" + IntToHex((int)ThreadID,4);
                    message += ", ! pStream->Read(buffer,sizeof(buffer))\n";
                    Synchronize( WriteToLogFile );
                    if( ClientSocket->Connected )
                        ClientSocket->Close();
                    if( ! Terminated )
                        Terminate();
                }
            }
            catch( ESocketError &exception )
            {
                message = TDateTime::CurrentDateTime().DateTimeString();
                message += ",ThreadID=" + IntToHex((int)ThreadID,4);
                message += ", Прихванато изключение в MyServerClientThread.cpp, " +
                            AnsiString(__FUNC__) + " " + exception.Message + "\n";
                Synchronize( WriteToLogFile );
                if( ClientSocket->Connected )
                    ClientSocket->Close();
                if( ! Terminated )
                    Terminate();
            }
        } else  {
            // Записвам в лог файла на сървъра, че с дадения клиент връзката
            // е разкъсана след зададения time out.
            if( ClientSocket->Connected )
                ClientSocket->Close();
            if( ! Terminated )
                Terminate();
            message = TDateTime::CurrentDateTime().DateTimeString();
            message += ",ThreadID=" + IntToHex((int)ThreadID,4);
            message += ", ! pStream->WaitForData(CLIENT_WAIT_TIME)\n";
            Synchronize( WriteToLogFile );                     
        }


Пон Апр 18, 2005 2:27 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Такааа, и искаш същата нишка да праща? :)


Пон Апр 18, 2005 2:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Единственото за което се сещам, е да направя малък TimeOut в WaitForData, примерно 100ms, и след изтичането му да проверявам обект от тип TEvent, сигнализиран в главната нишка, че имам данни за изпращане. Обаче тук става сложното, трябва в някаква динамична структура от данни, да пазя съответствието кой номер от таблицата ( не номер на ред, а уникален номер за ред от таблицата ) на коя нишка отговаря, за да мога да сигнализирам точно тази нишка. Някакви идеи ?


Пон Апр 18, 2005 2:35 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Тя нишката си изпраща, но само ехо след получни данни, а искам да мога да я карам да изпраща и други данни :D


Пон Апр 18, 2005 2:36 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Ами най-простото, което може да се направи, без да се налага да задълбаваш и да усложняваш, е да се пращат не точно веднага, а след максимум CLIENT_WAIT_TIME.


Пон Апр 18, 2005 2:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Не върши работа, оператора ще се изнерви да чака, трябва веднага да мога да изпращам, защото ще има и данни, които трябва да достигнат до всички клиенти едновремменно ( почти де, в цикъл )

П.П. Навсякъде в Интернет има един единствен глупав пример с блокиращ TServerSocket, който връща ехо. Никъде не намерих нещо по-различно. На какви ли не езици четох: английски, български, френски, руски, само китайския ми се опъна :D


Пон Апр 18, 2005 2:41 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Става сложно. :) Колко е това CLIENT_WAIT_TIME? Гледал ли си какво става в WaitForData()?


Пон Апр 18, 2005 2:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Няма как да видя WaitForData, само декларациите на класа мога да разгледам, останалото е писано на Delphi. CLIENT_WAIT_TIME ще го задавам да бъде от 1 до 3 минути. А бе аз толково време загубих с тия сложни сървъри на Builder, ча като си помисля лошо ми става. Ако бях си ги написал сам, щях да съм свършил досега. То декларации, то свойства, то 15 класа за елементарни неща да се направят с класическите сокети за Windows.


Пон Апр 18, 2005 2:53 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 25 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни