Keresés

Új hozzászólás Aktív témák

  • dqdb

    nagyúr

    válasz t-shirt #8662 üzenetére

    Ez esetben elég ennyi módosítás, és nem fogja a CPU-t tekerni feleslegesen:

    using (var port = new SerialPort("COM" + cp))
    {
    port.BaudRate = 9600;
    port.Parity = Parity.None;
    port.StopBits = StopBits.One;
    port.DataBits = 8;
    port.Handshake = Handshake.None;
    port.RtsEnable = true;

    port.DataReceived += Port_DataReceived;
    port.Open();


    while (fo_tomb_index <= (fo_tomb_merete-1))
    {
    receivedNewRequest.WaitOne();

    var s = port.ReadExisting();
    WriteData(port, fo_tomb[fo_tomb_index]);
    Console.WriteLine(fo_tomb[fo_tomb_index]);
    fo_tomb_index++;
    }

    }

    }

    private static WaitHandle receivedNewRequest = new AutoResetEvent(false);

    private static void WriteData(SerialPort port, string readLine)
    {
    port.WriteLine(readLine);
    }

    private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
    receivedNewRequest.Set();
    }

    joysefke: a kódodnál nem azért nem fogja feleslegesen terhelni a CPU-t, mert áttetted a futását egy másik szálra, hanem azért nem, mert a példádban a SerialPort.ReadLine hívást használod, ami ReadTimeout időt vár, mielőtt visszatérne, ha nincsen adat, és közben értelmes módon várakozik.

    tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek

Új hozzászólás Aktív témák