Ознакомьтесь с нашей политикой обработки персональных данных
  • ↓
  • ↑
  • ⇑
 
Записи пользователя: mistificator (список заголовков)
17:05 

Трюк 0x0011 — Жди меня, и я запущусь, только очень жди

mistificator
капелюх чарiвника
Проконтролировать факт запуска потока в Qt можно с использованием семафора. Делается это следующим образом.


//------------------------------------------------------------

QSemaphore sem(1);

class Thread: public QThread
{
public:
protected:
void run()
{
msleep(5000); // заставляем главный поток подождать 5 секунд
sem.release(); // сигнализируем об окончании ожидания
}
};

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

sem.acquire();

Thread t;
t.start();

sem.acquire(); // на этой строке будет ожидание вызова sem.release() внутри Thread::run()
sem.release();

t.wait();

return 0;
}
//------------------------------------------------------------

22:33 

Трюк 0x0010 — Дакл, Сакл и Какл, или Шаринг в Виндах

mistificator
капелюх чарiвника
Адовая конструкция, убивающая весь смысл NTFS'а на корню:

//------------------------------------------------------------
SECURITY_DESCRIPTOR _sd;
::InitializeSecurityDescriptor(&_sd, SECURITY_DESCRIPTOR_REVISION);
::SetSecurityDescriptorDacl(&_sd, true, 0, false);
//------------------------------------------------------------


Применяем дескриптор безопасности к папке или файлу.

//------------------------------------------------------------
::SetFileSecurity(<имя файла>, DACL_SECURITY_INFORMATION, &_sd);
//------------------------------------------------------------


Результат:

//------------------------------------------------------------
"Для данного объекта нет заданных разрешений.

Предупреждение: это потенциально опасно, так как любой пользователь,
имеющий доступ к данному объекту, может стать его владельцем.
Владелец объекта должен как можно быстрее назначить разрешения."
//------------------------------------------------------------

@темы: Лень как двигатель прогресса

22:29 

Трюк 0x000E — Qt 4.5 из комплекта Qt Creator

mistificator
капелюх чарiвника
Всё ещё мучаетесь сообщением типа "Entry point _Z5QFreePv not found in QtCore4.dll" при попытке запустить release-cборку приложения? Всё очень просто решается. В папке bin лежат QtCore4.dll и QtGui4.dll, собранные под Visual Studio 2008. И никаким боком они c вашим приложением, собранным на MinGW, работать не будут. Возьмите QtCore4.dll и QtGui4.dll (и что вам ещё нужно) из папки qt/lib , скопируйте в папку своего приложения, и будет вам счастье.
Enjoy.

@темы: .DLL

10:44 

Трюк 0x000D — Рекурсивное наследование

mistificator
капелюх чарiвника
Практическая польза от данного трюка определённо должна быть. Как придумаете, как его использовать — сообщайте.


//------------------------------------------------------------
#include
using namespace std;

class A {
public:
A() {
cout << "ctor A" << endl;
}
virtual void foo() {
cout << "foo A" << endl;
}
};

template
class B: public T {
public:
B(): T() {
cout << "ctor B<" << typeid(T).name() << ">" << endl;
}
virtual void foo() {
cout << "foo B<" << typeid(T).name() << ">" << endl;
}
};

int main() {

A * a = new B < B < B < B < B < A > > > > > ( );
a->foo();

return 0;
}
//------------------------------------------------------------

@темы: Трюки с наследованием, Трюки с шаблонами

22:56 

Трюк 0x000C — Константные вычисления и компилятор bcc32

mistificator
капелюх чарiвника
Давно имелись подозрения, что не всё гладко в реализации шаблонов в компиляторе Borland'a (bcc32, Borland C++ Compiler). Borland благополучно отошёл от разработки компиляторов, предоставив свои детища CodeGear'у. Те немного подретушировали компилятор, подправив в нём откровенные несоответствия современным стандартам С++ (добавив, в частности, поддержку неименованных union как в MSVC++), но некоторые проблемы с реализацией шаблонов всё же остались.
Одна из них заключается в том, что приведенный ниже код не компилируется компилятором bcc32.
Читать дальше...

@темы: Нетривиальный вызов, Трюки с шаблонами

00:27 

Трюк 0x000A — Не быть консерватором

mistificator
капелюх чарiвника
Иногда разработчику на С++ нужно остановиться и трезво оценить выполняемую задачу, оценить глубину своих знаний, оценить возможности STL и различных других библиотек, оценить сложность реализации элементарных парадигм средствами языка C++, и, осознав предстоящие трудности, перенести свой код в C#, например, или другой подходящий современный язык. Не будьте консерваторами!

@темы: Философия

Записная книжка программиста C++

главная