"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 스레드에서 C ++ 클래스 멤버 기능을 안전하게 호출하려면 어떻게해야합니까?

스레드에서 C ++ 클래스 멤버 기능을 안전하게 호출하려면 어떻게해야합니까?

2025-03-04에 게시되었습니다
검색:917

How Can I Safely Call C   Class Member Functions from Threads?

예를 들어 다음을 고려하십시오.

class C {Class C { void *print (void *) {cout 이제 C 인스턴스의 벡터를 만들어 봅시다 :

vector 클래스; pthread_t t1; class.push_back (c ()); class.push_back (c ());
class C {
    void *print(void *) { cout  c.print ()를 실행하는 스레드를 만들려면 다음과 같이 직관적으로 쓸 수 있습니다 : 

pthread_create (& t1, null, & c [0] .print, null)
vector classes;
pthread_t t1;
classes.push_back(C());
classes.push_back(C());
는 다음과 같습니다. (tree_item ::) (void*) 'to'void*(*) (void*) '(void*)'

pthread_create(&t1, NULL, &c[0].print, NULL);

이 장애물을 극복하려면이 장애물을 극복하려면

cannot convert ‘void* (tree_item::*)(void*)’ to ‘void* (*)(void*)’ 

정적 클래스 메소드에는 "이"매개 변수가 없으며 클래스의 인스턴스없이 직접 호출 할 수 있습니다. Hello 함수를위한 정적 클래스 방법을 구현하는 방법은 다음과 같습니다.

클래스 C { 공공의: 정적 void *hello (void *) {std :: cout

c c; pthread_create (& t, null, & c :: hello_helper, & c);

여기서 hello_helper는

void *hello_helper (void *context) {return (c *) context)-> hello (hello (hello); }
class C {
    void *print(void *) { cout  정적 클래스 메소드 또는 함수 포인터를 사용하여 스레드 내에서 클래스의 멤버 함수를 안전하게 호출하여 "이"매개 변수 문제를 피할 수 있습니다. 

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3