Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Потокобезопасный set_last_error() / 5 сообщений из 5, страница 1 из 1
13.04.2014, 08:36
    #38613395
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потокобезопасный set_last_error()
Для сохранения ошибки сделал my_error.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int my_last_error = 0;

void set_last_error(int err)
{
  my_last_error = err;
}

int get_last_error()
{
  return my_last_error;
}



дальше в коде если происходит какая-то ошибка
Код: plaintext
1.
2.
set_last_error(MY_ERROR_NUMBER);
return false;


вызывающий код если надо получает через get_last_error() и анализирует.

Все просто и красиво пока не потребовалось вызывать из двух потоков. Например оба одновременно вызвали set_last_error() и первый анализирует ошибку второго.

Есть какие-то стандартные способы решения этой проблемы?

Пока придумал такой вариант: сделать <map> и в нем по GetCurrentThreadId() (в качестве индекса массива) хранить в разных элементах, может проще варианты есть?
...
Рейтинг: 0 / 0
13.04.2014, 08:47
    #38613397
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потокобезопасный set_last_error()
Стандартная многопоточная библиотека Си как-то решает эту проблему, создает отдельный блок памяти для отдельного хранения своих глобальных переменных в каждом потоке, только не понимаю как именно это прописывается.
...
Рейтинг: 0 / 0
13.04.2014, 12:18
    #38613450
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потокобезопасный set_last_error()
Прочитай о Thread Local Storage. В большинстве компиляторов для этого есть директива
__thread или __declspec(thread).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.04.2014, 12:36
    #38613470
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потокобезопасный set_last_error()
Спасибо. Помогло.
...
Рейтинг: 0 / 0
13.04.2014, 16:42
    #38613607
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потокобезопасный set_last_error()
Dimitry SibiryakovПрочитай о Thread Local Storage. В большинстве компиляторов для этого есть директива
__thread или __declspec(thread).


+1
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Потокобезопасный set_last_error() / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]