Я читал о требовании, чтобы, если OpenSSL используется в многопоточном приложении, Вы зарегистрировали идентификационную функцию потока (и также взаимоисключающую функцию создания) с OpenSSL.
На Linux, согласно примеру, обеспеченному OpenSSL, поток обычно определяется путем регистрирования функции как это:
static unsigned long id_function(void){
return (unsigned long)pthread_self();
}
pthread_self () возвращает pthread_t, и это работает над Linux, так как pthread_t является просто определением типа неподписанных долго.
В Windows pthreads, FreeBSD и другие операционные системы, pthread_t являются структурой со следующей структурой:
struct {
void * p; /* Pointer to actual object */
unsigned int x; /* Extra information - reuse count etc */
}
Это не может быть просто брошено к неподписанному длинному, и когда я пытаюсь сделать так, это бросает ошибку компиляции. Я пытался брать пустоту *p и бросить это к неподписанному длинному на теории, что указатель памяти должен быть последовательным и уникальным через потоки, но это правые дела моя программа для катастрофического отказа много.
Что я могу зарегистрировать в OpenSSL как идентификационная функция потока при использовании Windows pthreads или FreeBSD или какой-либо из других операционных систем как это?
Кроме того, как дополнительный вопрос:
Кто-либо знает, должно ли это также быть сделано, если OpenSSL компилируется в и используется с QT, и раз так как зарегистрировать QThreads в OpenSSL? Удивительно, я, может казаться, не нахожу ответ в документации QT.