En olekaan pitkään aikaan udellut mitään vb.net-rintamalla. On sinänsä harmi, että kovin harva sitä vielä taitaa. No, enempiä jaarittelematta, tässä on ongelmani:
Ohjelmassani painettessa nappia soitetaan piipperin kautta korvienrääkkäyssäveliä. No, tämähän on jo toteutettu, mutta jos se halutaankin lopettaa kesken, ongelmat ilmaantuvat. Katsos, kun Beepin pyöriessä ei voikaan klikata stop-nappia. Hiiri kylläkin liikkuu.
'Soittosubi For j = 0 To Ubound(freq) If Not stopb Then Soitin.Soita(freq(j),last(j)) Else stopb = False Exit For End If Next
Ja stop-nappi simppelisti asettaa stopb:n trueksi. Mikä tähän auttaa? Säikeet? Apua tarvitaan ja auttajat palkitaan krediiteissä.
Soitin.Soita kutsuu kernel32:n beepiä.
Ilmeisesti siis soitat säveltä uudestaan ja uudestaan aina hetken kerrallaan?
Eikös tuo ole ihan perinteinen DoEventsin paikka? Testasin tällaisella, ja looppi katkesi kyllä, mutta jostakin syystä piti klikata kahteen kertaan Button2:sta:
Private Sub Button1Click(sender As System.Object, e As System.EventArgs) Lopeta = False A = 0 While Lopeta = False 'mukamas loputon silmukka A = A + 1 ' Tähän vaan laitat sen tekemisesi, Me.button1.Text = A ' Soitin.Soita(freq(j),last(j)) Application.DoEvents 'DoEventsin uusi versio End While End Sub Private Sub Button2Click(sender As System.Object, e As System.EventArgs) Lopeta = True 'tällä katkaistaan se silmukka End Sub
Ah, ensimmäinen VB.NET:llä kirjoittamani koodinpätkä! Toivottavasti ei ala ääni pätkiä, DoEvents voi katkaista hetkeksi.
Juice kirjoitti:
On sinänsä harmi, että kovin harva sitä vielä taitaa.
Niin, mikähän kynnys kaikilla on uuden kielen opetteluun? Ei se todellakaan ole iso askel (Ensimmäinen VB.NET-pätkäni, kolmas tai neljäs VB-pätkäni, ja silti väitän osaavani VB.NETiä).
Mikäs ohjelma tuosta oikein tulee?
Kyllähän se katkeaa, mutta tosiaan joutuu painamaan kahteen kertaan. No, kiitos avusta, täytynee keksiä jotakin.
Tosiaan, yhden kielen kun oppii, niin muut ovat lastenleikkiä.
Ohjelmasta tulee osa uutta piipperiprojektiani (toinen käynnissäoleva projekti on se kielijuttu). Tämä on itse soitin, sävellysohjelmakin olisi tarkoitus tehdä. Täytynee kuitenkin ensin saada timmiin kuntoon tämä soitin :)
Antti hoi, VBKoodi syö kaikki tabulaattorit! Korvasin spaceilla.
Imports System Imports System.Drawing Imports System.Threading ' Täältä löytyvät säikeet Imports System.Windows.Forms Namespace VBKoe Public Class MainForm Inherits System.Windows.Forms.Form Private T As Thread ' Säie Private A As Integer ' Nappeja Private Jatka As System.Windows.Forms.Button Private Aloita As System.Windows.Forms.Button Private Lopeta As System.Windows.Forms.Button Public Shared Sub Main Dim fMainForm As New MainForm fMainForm.ShowDialog() End Sub Public Sub New() MyBase.New Me.InitializeComponent T = New Thread(AddressOf Me.Silmukka) T.Start ' Käynnistetään säie, se aloittaa heti työnsä End Sub '**************************************** ' Windows Forms Designer Generated Code * '**************************************** ' Tätä säie jauhaa Private Sub Silmukka Alku: ' Suspend on alussa, koska ensimmäisellä kerralla ' (T.Start) ei tarvitse oikeasti tehdä mitään. T.Suspend ' Tässä tehdään jotain While A < 10000 A = A + 1 Me.Text = A End While GoTo Alku ' Ja sitten palataan alkuun ja nukkumaan End Sub Private Sub AloitaClick(sender As System.Object, e As System.EventArgs) T.Suspend ' Nukutetaan varmuuden vuoksi A = 0 ' Merkitään, että thread saa mennä alkuun T.Resume ' ja herätetään End Sub Private Sub LopetaClick(sender As System.Object, e As System.EventArgs) T.Suspend ' Nukutetaan säie End Sub Private Sub JatkaClick(sender As System.Object, e As System.EventArgs) T.Suspend ' Nukutetaan varmuuden vuoksi T.Resume ' ja herätetään End Sub ' Formin sulkeminen, tapetaan säie Private Sub MainFormClosing(sender As System.Object, e As System.ComponentModel.CancelEventArgs) T.Suspend ' Ja lopuksi tietenkin tapetaan säie: T.Resume ' Nukutus, herätys ja Abort T.Abort End Sub End Class End Namespace
Kaikkeen sitä ryhtyy, jos sillä välttyy tekemästä läksyjä :D
Siinä on siis ohjelma, joka laskee ikkunan yläpalkissa 0:sta 10000:een, kun painetaan aloitusnappia. Toteutustapana säikeet. Lopetusnappi keskeyttää laskennan, aloitus aloittaa alusta ja jatkaminen jatkaa siitä, mihin on jääty. Tarvitset formin, jolla nuo nappulat sijaitsevat, ja InitializeComponent-Subin, joka asettelee napit paikoilleen. Tuon ratkaisun mahdollinen riski piilee siinä, että Suspendissa suoritus saattaa pysähtyä jotenkin eri paikkaan kuin olisi suotavaa... En tiedä.
No, jotakin tällaista olinkin pyöritellyt päässäni ja sainkin jopa toimimaan. Suuret kiitokset. Nyt visualizerin kimppuun \o/
Metabolix kirjoitti:
Kaikkeen sitä ryhtyy, jos sillä välttyy tekemästä läksyjä :D
Niin totta, niin totta. Pätee myös kokeisiin lukemiseen :)
Niin ja tutkielmien tekemiseen. Tässä just oon yhtäkin "tekemässä", eli lueskelen Ohjelmointiputkan foorumia. :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.