Вызов метода с использованием основного потока из дополнительного потока - PullRequest
4 голосов
/ 07 ноября 2011

Я вызвал метод, используя вторичный поток.Изнутри метода мне нужно вызвать метод из основного потока.

вот структура

void main_thread_method()
{

} 

void secondary_thread_method()
{

//do something here

  call main_thread_method() here using main thread

}

pthread thread1;

pthread_create (&thread1, NULL, (void *) &secondary_thread_method, NULL);

pthread_join(thread1);

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

Если в вашем основном потоке работает насос сообщений, вы можете как-нибудь опубликовать сообщение, чтобы выполнить функцию при получении сообщения.

В противном случае есть простая очередь (соответствующая блокировка, конечно). Добавьте достаточно данных в очередь, чтобы можно было вызывать main_thread_method. (аргументы и т. д.). Периодически опрашивать простую очередь на наличие новых сообщений в основном потоке и обрабатывать их.

1 голос
/ 07 ноября 2011

Я понял, что вы хотите вызвать из вторичного потока метод, который должен выполняться в основном потоке. Это невозможно. Вызванные функции выполняются в том же потоке. Вы должны использовать любой способ многопоточности связи, такой как семафоры, пул сообщений, условия и т. Д.

...