Вам не нужны a, b и c в ELSE
Sub Button1_Click()
Dim ws As Worksheet
Dim a As String
Dim b As String
Dim c As String
Dim URL As String
'Lockout Functions
'Cancel = True
'Check for Muted Sound, Unmute
'First Question
a = Application.InputBox("What is 1+1?")
If a = "2" Then 'continue
Else
Application.Speech.Speak "Are you even trying?"
MsgBox "Hi, you got that answer wrong"
End If
'Second Question
b = Application.InputBox("Finish this Sequence 1123_813__")
If b = "1123581321" Then 'Continue
Else
Application.Speech.Speak "It's the Fibonacci duh!"
MsgBox "Hi, you got that answer wrong"
End If
'Third Question
c = Application.InputBox("What are the next three numbers 1, 4, 9, 16, ?")
If c = "1,4,9,16,25,36,49" Then 'continue
Else
Application.Speech.Speak "Terrible!"
MsgBox "Hi, you got that answer wrong"
End If
'Unlock/Return Control
'Cancel = False
End Sub
Это - плохой дизайн, чтобы иметь их несколько PrintWriter
s на том же потоке. Действительно Вы хотите, по крайней мере, объект, называет их, чтобы синхронизироваться (или заключенный поток).
Однако принятие по некоторым причинам Вас действительно хочет несколько PrintWriter
s:
Первая проблема: Writer
s не используют this
как блокировка. PrintWriter
и BufferedWriter
по умолчанию оба используют Writer
они создаются с как блокировка. Это, очевидно, полностью повреждается. Они должны использовать Writer
блокировка, не Writer
самостоятельно. Легкая ошибка, учитывая, что, имея блокировку функции Object
удаляет статическую безопасность типов. Таким образом, необходимо будет создать a PrintWriter
с сокетом OutputStream
(или некоторый другой общий объект) как блокировка.
Во-вторых, у нас есть буферизация в PrintWriter
. Так приезжайте конец буфера, половина записана, и половина ожидают следующей записи. Для предотвращения этого любой внешне блокирует для объединения a print
и flush
, или используйте автосбрасывание и добавьте символ новой строки.
Так, это не значительно ориентировано на многопотоковое исполнение, но можно взломать его. Или можно использовать лучший дизайн.
Вам нужен способ использовать то же PrintWriter
между потоками (t1.writer == t2.writer
, не просто PrintWriter
s созданный из того же OutputStream
). С тем же PrintWriter
, все операции записи синхронизируются.