Например есть два теста, и выполняются они параллельно в разных потоках, каждый из них открывает браузер и переходит по ссылке, после перехода они попадают на страницу входа в приложение, далее им нужные учётные данные для входа в приложения, грубо скажем, что каждый из них считывает эти данные напрямую из файла и использует их для входа в приложение. Вопрос: Как в этом случае гарантировать, что в каждом из тестов не используется одна и та же учётная запись? Что данные которые они считали из файла для создания экземпляров класса User не используются уже каким-нибудь другим потоком?
Сергей Горностаев, можете пример привести? А то я не особо знаком с ThreadLocal. И что если я сделаю локальную переменную User, а потом? Как инициализировать её? Как получить экземпляр с уникальными данными (то есть как убедится при считывании данных из файла, что они уже не используются каким-то другим потоком)? Вариант
с захардкоженными значениями наподобие new User("username", "password") не подходит так как придётся делать так в каждом тесте.
В смысле клиент создает сокет указывая данные сервера (номер порта и ip адрес), север подтверждает подключение от клиента и создает новый сокет на другом порту
abcd0x00: Это функция указатель на которую передается в другую функцию, чтобы передавать данные любого типа. Просто она вырвана из контекста. Так объясните почему в этом случае применяется один оператор разыменовывания?
Объясните ещё пожалуйста почему в одном случае для приведения указателя на void достаточно написать (char *), а в другом необходимо (char **)?
[code]/* printnv: вывести имя и значения по строке формата arg */
void printnv(Nameval *p, void *arg)
{
char *fmt;
fmt = (char *) arg;
printf(fmt, p->name, p->value);
} [\code]
[code]/* scmp: сравнение строк *pl и *р2 */
int scmp(const void *pl, const void *p2)
{
char *vl, *v2;
vl = *(char **) pi;
v2 = *(char **) p2;
return strcmp(vl, v2);
} [\code]
abcd0x00: Объясните ещё пожалуйста почему в одном случае для приведения указателя на void достаточно написать (char *), а в другом необходимо (char **)?
[code]/* printnv: вывести имя и значения по строке формата arg */
void printnv(Nameval *p, void *arg)
{
char *fmt;
fmt = (char *) arg;
printf(fmt, p->name, p->value);
} [/code]
[code]/* scmp: сравнение строк *pl и *р2 */
int scmp(const void *pl, const void *p2)
{
char *vl, *v2;
vl = *(char **) pi;
v2 = *(char **) p2;
return strcmp(vl, v2);
} [/code]
Смотрите такое выражение char s[] = "ABC" можно записать так char *s = "ABC" или char s[] = {'A', 'B', 'C', '\0'}. Если я правильно понимаю эти все три выражения эквивалентны. В случае обращения к переменной s она вернет адрес первого символа в массиве. Но если применю оператор * написав *s возвращается строка. Так как в таком случае компилятор понимает, что нужно вернуть строку, а несимвол?
А можете сказать где чаще всего применяются фреймворки? Есть им применение на статических (не полностью статических, но и не spa) веб-сайтах? Например для создания структуры фронтенда?
Дмитрий Макаров: спасибо за ответ. Да я уже поступил, но как говорил раньше, в физике, электротехнике и т.д. я вообще ноль (сдавал математику и информатику). Можете привести список, того что мне нужно изучить для начала, чтобы на учебе плавать? А, то вдруг как у вас получится, не понял основ, а на основах все и завязано. Я этого боюсь, не хочу просто четыре года терять из-за того, что в начале протупил.