Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Работещ форум за CBuilder в България
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=434
Страница 1 от 2

Автор:  [ Пон Фев 28, 2005 12:42 pm ]
Заглавие:  Работещ форум за CBuilder в България

Знам, че на този въпрос не му е тука мястото, но с риска да ме псувате, ще попитам:
Търся работещ форум за CBuilder в България. Преди седмица посетих нещо много интересно, обаче къде се дяна този URL, така е не го намерих. Ако някой знае нещо по въпроса, моля, нека прати някой линк. Tемите да са свързани с програмирането на CBuilder, а не за Visual C++, MFC, OWL или въобще C++.

Автор:  ToHu [ Вто Мар 01, 2005 8:46 am ]
Заглавие: 

Виждал съм руски, ама Български .... не се сещам

Автор:  [ Вто Мар 01, 2005 5:20 pm ]
Заглавие: 

Намерих нещо в Русия, ама е доста постно: http://www.sources.ru/builder/index.html

Автор:  ToHu [ Вто Мар 01, 2005 9:43 pm ]
Заглавие: 

http://www.bcbdev.ru

Автор:  [ Сря Мар 02, 2005 7:54 am ]
Заглавие: 

10x, линка наистина си струва.

Автор:  [ Пон Апр 18, 2005 2:08 pm ]
Заглавие: 

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

Автор:  Реконструктор [ Пон Апр 18, 2005 2:13 pm ]
Заглавие: 

Нишката къв тип е? Седи и чака нещо да пристигне, или се върти непрекъснато, проверявайки буфера?

Автор:  [ Пон Апр 18, 2005 2:27 pm ]
Заглавие: 

Нишката се блокирва от функцията 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:32 pm ]
Заглавие: 

Такааа, и искаш същата нишка да праща? :)

Автор:  [ Пон Апр 18, 2005 2:35 pm ]
Заглавие: 

Единственото за което се сещам, е да направя малък TimeOut в WaitForData, примерно 100ms, и след изтичането му да проверявам обект от тип TEvent, сигнализиран в главната нишка, че имам данни за изпращане. Обаче тук става сложното, трябва в някаква динамична структура от данни, да пазя съответствието кой номер от таблицата ( не номер на ред, а уникален номер за ред от таблицата ) на коя нишка отговаря, за да мога да сигнализирам точно тази нишка. Някакви идеи ?

Автор:  [ Пон Апр 18, 2005 2:36 pm ]
Заглавие: 

Тя нишката си изпраща, но само ехо след получни данни, а искам да мога да я карам да изпраща и други данни :D

Автор:  Реконструктор [ Пон Апр 18, 2005 2:38 pm ]
Заглавие: 

Ами най-простото, което може да се направи, без да се налага да задълбаваш и да усложняваш, е да се пращат не точно веднага, а след максимум CLIENT_WAIT_TIME.

Автор:  [ Пон Апр 18, 2005 2:41 pm ]
Заглавие: 

Не върши работа, оператора ще се изнерви да чака, трябва веднага да мога да изпращам, защото ще има и данни, които трябва да достигнат до всички клиенти едновремменно ( почти де, в цикъл )

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

Автор:  Реконструктор [ Пон Апр 18, 2005 2:47 pm ]
Заглавие: 

Става сложно. :) Колко е това CLIENT_WAIT_TIME? Гледал ли си какво става в WaitForData()?

Автор:  [ Пон Апр 18, 2005 2:53 pm ]
Заглавие: 

Няма как да видя WaitForData, само декларациите на класа мога да разгледам, останалото е писано на Delphi. CLIENT_WAIT_TIME ще го задавам да бъде от 1 до 3 минути. А бе аз толково време загубих с тия сложни сървъри на Builder, ча като си помисля лошо ми става. Ако бях си ги написал сам, щях да съм свършил досега. То декларации, то свойства, то 15 класа за елементарни неща да се направят с класическите сокети за Windows.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/