Я хочу, чтобы в моем приложении было следующее поведение: пока приложение (сервер) ожидает сообщения от другого приложения (клиента), я хочу иметь возможность выйти, если он слишком длинный, с ввод от пользователя.Параллельные потоки, останавливающие друг друга
Поэтому я должен запустить две темы из третьего:
WaitForClientMessage
WaitForUserInput
Используя pthread
, я представлял себе, что я могу назвать каждую нить и дать им идентификатор другой, поэтому, если они закончатся, они отменяют другой. Но теперь я вижу, что это не сработает.
Как это сделать? Я думаю, это просто, потому что такое поведение часто наблюдается, но я не знаю, как это работает.
EDIT Вот какой-то общий код, описывающий то, что я себе представлял.
void main_thread(void)
{
void * thread_rtn_val;
/* Parallel threads */
pthread_t thread_WaitForClientMessage;
pthread_t thread_WaitForUserInput;
/* Run Threads */
pthread_create(&thread_WaitForClientMessage, NULL, run_window, (void *)thread_sdp);
pthread_create(&thread_WaitForUserInput, NULL, run_client, (void *)arg_array);
}
.
void run_window(void)
{
/* Refresh screen and watch for user input */
for(...)
{
if(user press enter)
{
phtread_cancel(thread_WaitForClientMessage)
}
}
}
.
void run_client(void)
{
/* Wait for client message */
recv()...
phtread_cancel(thread_WaitForUserInput)
}
Можете ли вы указать текущий код и соответствующий тег языка? – Marvin
- это сообщение клиента, входящее в сокет, когда пользовательский ввод поступает с консоли? вы могли бы, вероятно, использовать 'select' или' poll' в одном потоке с подходящим значением таймаута. –
@ Марвин Я добавлю код @ NG. Здесь потоки находятся на более высоких уровнях, и я не хочу изменять уже определенные функции сокетов. – JeanRene