Как я понял, вы пытаетесь отправить информацию между потоками. Официальное название называется Interthread Communication.
Если вы хотите использовать зсапЕ вы должны использовать трубы, который является средством связи между процессов не Темы
Вот способ, которым Вы можете общаться между потоками. Нити чтения представляют собой поток scanf. Нить писателя представляет собой миф.
Система проста. У вас есть общая память. Когда один поток пытается записать его, он блокирует память (которая находится в очереди в примере) и записывает. Когда другой пытается его прочитать, он снова блокирует память и считывает ее, а затем удаляет (выдает из очереди). Если очередь пуста, поток читателя ждет, пока кто-то что-нибудь что-нибудь что-нибудь напишет.
struct MessageQueue
{
std::queue<std::string> msg_queue;
pthread_mutex_t mu_queue;
pthread_cond_t cond;
};
{
// In a reader thread, far, far away...
MessageQueue *mq = <a pointer to the same instance that the main thread has>;
std::string msg = read_a_line_from_irc_or_whatever();
pthread_mutex_lock(&mq->mu_queue);
mq->msg_queue.push(msg);
pthread_mutex_unlock(&mq->mu_queue);
pthread_cond_signal(&mq->cond);
}
{
// Main thread
MessageQueue *mq = <a pointer to the same instance that the main thread has>;
while(1)
{
pthread_mutex_lock(&mq->mu_queue);
if(!mq->msg_queue.empty())
{
std::string s = mq->msg_queue.top();
mq->msg_queue.pop();
pthread_mutex_unlock(&mq->mu_queue);
handle_that_string(s);
}
else
{
pthread_cond_wait(&mq->cond, &mq->mu_queue)
}
}
Ваш вопрос нуждается в уточнении. Не имеет смысла говорить «отправить сообщение« scanf ». Кроме того, вы не хотите использовать' scanf' с C++ 'std :: string' в любом случае. Я не могу определить, что вы здесь задаете. – frasnian
@frasnian Отредактировано. Дайте мне знать, если это яснее. –
Вход для 'std :: cin' обычно поступает с клавиатуры или другого файла, а не из самой программы. Вы хотите просто установить 'mystring' со строкой из' mythread() '. Если это так, вы должны использовать 'std :: async()' и получить значение из возвращаемого будущего с помощью 'get()'. Имейте 'mythread()' return 'mystring'. – 0x499602D2