#include <thread>
#include <iostream>
class bar {
public:
void foo() {
std::cout << "hello from member function" << std::endl;
}
};
int main()
{
std::thread t(&bar::foo, bar());
t.join();
}
EDIT: Учет вашего редактирования, вы должны сделать это следующим образом:
std::thread spawn() {
return std::thread(&blub::test, this);
}
UPDATE: я хочу объяснить несколько пунктов, некоторые из них также обсуждались в комментариях.
Синтаксис, описанный выше, определен в терминах определения INVOKE (§20.8.2.1):
Определить INVOKE (f, t1, t2,. .., tN) следующим образом:
blockquote>
- (t1. * f) (t2, ..., tN), когда f является указателем на функцию-член класса T и t1 является объект типа T или ссылку на объект типа T или ссылку на объект типа, полученного из T;
- ((* t1). * f) (t2, ..., tN ), когда f является указателем на функцию-член класса T и t1 не является одним из типов, описанных в предыдущем пункте;
- t1. * f, когда N == 1 и f является указателем на данные члена класса T и t 1 являются объектами типа T или ссылкой на объект типа T или ссылкой на объект типа, полученного из T;
- (* t1). * f, когда N == 1 и f является указателем на данные элемента класса T и t 1 не является один из типов, описанных в предыдущем пункте:
- f (t1, t2, ..., tN) во всех других случаях.
Еще один общий факт, который я хочу отметить, заключается в том, что по умолчанию конструктор потока копирует все переданные ему аргументы. Причина этого в том, что аргументам может потребоваться пережить вызывающий поток, и копирование аргументов гарантирует это. Вместо этого, если вы хотите действительно передать ссылку, вы можете использовать
std::reference_wrapper
, созданныйstd::ref
.std::thread (foo, std::ref(arg1));
Поступая таким образом, вы обещаете, что будете заботиться о том, чтобы аргументы будут существовать, когда поток работает на них.
Обратите внимание, что все перечисленные выше могут также применяться к
std::async
иstd::bind
.
Можно попробовать установку Thread.CurrentThread.CurrentUICulture
и/или .CurrentCulture
к CultureInfo("en-US")
.
Если это - приложение ASP.NET, можно установить язык UI в web.config (*):
<system.web>
<globalization ... uiCulture="en-US" ... />
</system.web>
Для других приложений, региональные настройки текущего пользователя используются по умолчанию, и необходимо явно переопределить его - например, Поток. CurrentUICulture = новый CultureInfo ("en-США").
(*) протест - если ошибка в результатах файла конфигурации в исключении, выданном, прежде чем, элемент обрабатывается, Вы получите значение по умолчанию uiCulture.
То, чтобы вынуждать исключения отобразиться на различном языке кажется немного резким на пользователе..., можно ли отобразить код ошибки наряду с сообщением? Тогда пользователь получит что-то, что они могут понять, и можно искать код ошибки для переведенной версии.
я не .net парень, таким образом, я не знаю, возможно ли это, просто идея.
, Как я подаю свою заявку всегда, используют английский язык при отображении win32/.net сообщений исключений?
, В первую очередь, не показывают win32/.net сообщения об исключениях пользователям . Необходимо обработать исключения вместо того, чтобы показать их пользователю.
сообщениями об исключениях по умолчанию будет показан на языке UI тока (если соответствующий пакет языка будет установлен, иначе они нейтрализация английскому языку). Можно изменить сообщения об исключениях, изменяющиеся Поток. CurrentThread. Свойство CurrentUICulture, однако это будет влиять на целый GUI Вашего приложения.
Весь больше причины, почему исключения не должны быть переведены (плохо). При входе исключений это делает muc большим количеством смысла сделать это на единственном языке. Я не могу полагать, что Microsoft не думала о способе сделать это кроме UICulture, который является в основном неопцией: (