스레드를 지원하는 작은 임베디드 RTOS를 사용하고 있습니다. 나는 C++로 프로그래밍 중이며 스레드로 임의의 클래스의 임의의 멤버 함수를 실행할 수있는 클래스를 만들고 싶습니다. RTOS는 멤버 함수에서 쓰레드 생성을 직접적으로 지원하지 않지만 쓰래드에서 호출되면 잘 동작합니다. 부스트 :: 스레드는 내 플랫폼에서 사용할 수 없습니다.하우투 Boost없이 스레드로 C++ 멤버 함수를 실행 하시겠습니까?
현재 friend_starter() 함수를 통해 임의의 방식으로 스레드를 시작하지만 스레드를 실행할 각 클래스에 대해 별도의 스레드가 있어야합니다. 현재 스레드 기본 클래스의 현재 솔루션을 가상 run() 함수를 사용하지만이 단점은 클래스에 대한 하나의 스레드를 시작할 수 있으며 그 run() 함수 + 무엇을 차례로 호출하는 제한됩니다 (즉, 수 없습니다.) 우아하게) (실행 내에서 임의의 함수를 실행
나는 것 이상적 그래서이 클래스 "X"멤버 함수 내에서 다음을 수행 할 수 템플릿 된 클래스 "실"과 같은 :
class X
{
run_as_thread(void* p)';
};
X x;
void* p = NULL;
template<X>
thread t(x, X::run_as_thread, p);
//somehow causing the following to be run as a thread :
x->run_as_thread(p);
미안 미안하지만 전에 여기까지 죽어 버렸 습니다만, 부스트 :: 쓰레드를 사용하여이 일을 성취 할 수있는 참조를 찾을 수있을뿐입니다. 또한 힙에 액세스 할 수 없으므로 모든 전역 변수가 정적이어야합니다.
많은 감사,
마이크
'클래스에 대한 1 개의 스레드 시작'- 클래스의 각 인스턴스에 대해 하나의 스레드를 의미합니까? 가상 run() 함수가 임베디드 작업에서 특히 제한적이라는 것을 알지 못합니다. 일반적으로 내 스레드는 영원히 실행되고 대기중인 메시지를 처리합니다. 메시지에는 열거 된 명령 등이 포함되어있어 스레드에게 수행 할 작업을 지시합니다. –
오 - 내 의견을 잊어 버림 - '나는 또한 힙에 접근 할 수 없다'는 것을 눈치 챘다. 당신은 실제로 매우 제한되어 있습니다. 어떻게 물건을 얻을 수 있는지 모르겠다. –