При использовании платформы как django платформа может легко сделать это для Вас использующий стандартные фильтры. На самом деле я - вполне уверенный django, автоматически делает это, если Вы не говорите его не.
Иначе, я рекомендовал бы использовать своего рода regex проверку прежде, чем принять исходные данные от форм. Я не думаю, что существует серебряная пуля для Вашей проблемы, но использование модуля ре, необходимо быть в состоянии создать то, в чем Вы нуждаетесь.
Потоки Boost намного проще в использовании, чем потоки pthread, и, на мой взгляд, немного проще в использовании, чем потоки Java. Когда создается объект потока ускорения, он запускает новый поток. Пользователь предоставляет функцию или функциональный объект, который будет выполняться в этом новом потоке.
Это действительно так просто, как:
boost::thread* thr = new boost::thread(MyFunc());
thr->join();
Вы можете легко передавать данные в поток, сохраняя значения внутри объекта функции. А в последней версии boost вы можете передать переменное количество аргументов самому конструктору потока, которые затем будут переданы оператору ()
вашего функционального объекта.
Вы также можете использовать RAII- стиль блокировки с помощью boost :: mutex
для синхронизации.
Обратите внимание, что C ++ 0x будет использовать тот же синтаксис для std :: thread
.
Performance wise I wouldn't really worry. It is my gut feeling that a boost/c++ expert could write faster code than a java expert. But any advantages would have to fought for.
I prefer Boost's design paradigms to Java's. Java is OO all the way, where Boost/C++ allows for OO if you like but uses the most useful paradigm for the problem at hand. In particular I love RAII when dealing with locks. Java handles memory management beautifully, but sometimes it feels like the rest of the programmers' resources get shafted: file handles, mutexes, DB, sockets, etc.
Java's concurrent library is more extensive than Boost's. Thread pools, concurrent containers, atomics, etc. But the core primitives are on par with each other, threads, mutexes, condition variables.
So for performance I'd say it's a wash. If you need lots of high level concurrent library support Java wins. If you prefer paradigm freedom C++.
Если вы ориентируетесь на конкретную платформу, прямой вызов ОС, вероятно, будет немного быстрее, чем использование ускорения для C ++. Я бы предпочел использовать ACE, поскольку вы, как правило, можете делать правильные вызовы для своей основной платформы, и она все равно будет независимой от платформы. Скорость Java должна быть примерно такой же, если вы можете гарантировать, что она будет работать на последней версии.
Обычно вы должны вызывать glGetError
после каждого второго gl ...
вызов, поскольку одним из эффектов вызова является очистка ошибки из стека ( из MSDN ):
Когда возникает ошибка, флаг ошибки устанавливается на соответствующее значение кода ошибки. Никакие другие ошибки не записываются до тех пор, пока не будет вызван glGetError, код ошибки будет возвращен, а флаг сброшен на GL_NO_ERROR.
Однако, если у вас есть вызовы, заключенные в glBegin
и glEnd
вызовите glError
после glEnd
. Это должно вернуть вам правильный код ошибки (если она есть) и очистить стек ошибок.
Примечание: в C ++ в настоящее время нет модели памяти. На другом компьютере одно и то же приложение C ++ может иметь дело с другой моделью памяти. Это делает переносимое параллельное программирование на C ++ еще более сложным.
В C ++ при желании можно напрямую использовать pthreads (pthread_create () и т. Д.). Внутренне Java использует потоки pthreads через среду выполнения. Сделайте «ldd», чтобы увидеть.