Заголовок может быть немного неопределенным. Это - то, что я имею в виду:
Скажите, что у меня есть два способа быть введенным к моей программе. Первое через клавиатуру, с помощью функции getLine
какие блоки, пока строка не читается. Другой, скажем, через a TChan
, где использование readTChan chan
также приведет к блоку, пока значение не будет присутствовать в канале, после чего оно будет считано.
То, что я хочу выполнить, является способностью ожидать обоих значений, с помощью единственного потока и не позволяя моему ЦП перейти к 100%. Момент одно из двух значений доступно, оно выбирается и резюме программы. (Скажите, с помощью Either
уведомлять, какое из двух значений было получено.)
Действительно ли это возможно?
Большое спасибо!
Я не думаю, что «используя одну нить» имеет смысл здесь. Вы уже должны использовать несколько потоков Haskell в любом случае для записи в Tchan
. Вы должны использовать два потока Haskell, чтобы сделать это и использовать MVAR
или аналогичный для передачи первого результата для прибытия. Например:
module Main where
import System.IO
import Control.Concurrent
import Control.Concurrent.MVar
import Control.Concurrent.STM
import Control.Concurrent.STM.TChan
main = do
chan <- newTChanIO
forkIO (threadTChanWrite chan)
threadMultiplexedRead chan
threadTChanWrite chan = do
threadDelay 5000000
atomically $ writeTChan chan 3
threadMultiplexedRead chan = do
mvar <- newEmptyMVar
forkIO (threadKeyboardRead mvar)
forkIO (threadTChanRead mvar chan)
v <- readMVar mvar
print v
threadKeyboardRead mvar = do
str <- getLine
putMVar mvar (Right str)
threadTChanRead mvar chan = do
v <- atomically (readTChan chan)
putMVar mvar (Left v)
Правильная реализация, вероятно, очистит темы, оставленные, лежащие потом, кстати.
Можно изменить значок приложения в самом приложении Windows. И поместите это приложение в проект установки.
Щелкните правой кнопкой мыши по проекту WinApp и в разделе Приложение выберите и Значок , который будет ico-файлом. Найдите файл значка и выберите его . Создайте проект и присоедините его к проекту настройки.
-121--2122302-Посмотрите на этот вопрос .
-121--2805605-У меня есть два способа ввода в мою программу
Вы должны иметь возможность использовать 2 потока, по одному на источник ввода, которые ожидают на своих соответствующих входах, записывая результат в общий канал или mvar, управляемый третьим потоком.