Да, вам нужна очередь производителя / потребителя. У меня есть один пример этого в моем учебнике по потокам - если вы посмотрите мою страницу "deadlocks / monitor методов" , вы найдете код во второй половине.
Конечно, в сети есть и много других примеров - и .NET 4.0 будет поставляться с одним в фреймворке (скорее, более полнофункциональным, чем мой!). В .NET 4.0 вы, вероятно, включили бы ConcurrentQueue
в BlockingCollection
.
Версия на этой странице не является общей (она была написана давно назад), но вы, вероятно, захотите сделать ее общей - это будет тривиально.
Вы должны вызывать Produce
из каждого «нормального» потока и Consume
из одного потока, просто зацикливаясь и регистрируя все, что он потребляет. Вероятно, проще всего сделать потребительский поток фоновым потоком, поэтому вам не нужно беспокоиться об «остановке» очереди при выходе из приложения. Это означает, что есть удаленная возможность пропустить окончательную запись журнала (если она наполовину записывается при выходе из приложения) - или даже больше, если вы производите быстрее, чем оно может потреблять / log.
\documentclass{article}
\begin{document}
\noindent\hbox to 0.5\textwidth{a}b
Curabitur viverra ligula a dui condimentum tempus. Aenean convallis, massa ut fermentum
convallis, leo justo iaculis lectus, quis molestie orci ligula ut leo. Quisque vitae neque
sit amet tortor convallis rhoncus ac at nibh. Cras sit amet mauris sit amet neque
tincidunt iaculis non non ante. Proin quis nisi porttitor enim adipiscing bibendum et
fermentum magna. Morbi sapien nibh, venenatis in fringilla id, laoreet ut libero.
\end{document}
NB: это работает, если ширина a меньше 0,5 \ textwidth, поэтому многоцветный ответ, вероятно, более разумен
Вы можете попробовать среду multicol
с параметром columnsep
, установленным на 0.
Кстати, существует также способ измерения размер визуализированной части через \ settowidth
и \ settoheight
.
Попробуйте заменить \ hfill на \ hskip 0pt плюс 1fill, и вы сможете делать удивительные вещи. Например,
a\hskip 0pt plus .35 fill b\hskip 0pt plus .65 fill