gpt4 book ai didi

visual-c++ - OnTimer 只重复第一个函数调用

转载 作者:行者123 更新时间:2023-12-04 06:15:43 24 4
gpt4 key购买 nike

基本上我有一个程序,它有 6 个通过串行端口发送值的 slider ,我使用计时器在用户更改这些值时动态重新发送这些值。我遇到的问题是我的计时器调用的 6 个函数的行为很奇怪,第一个函数调用正常工作,并不断发送信号,但之后调用的其他 5 个函数仅在值被更改时才发送信号用户。 (我希望每个 slider 的当前值不断重新发送,这样我发送它的设备就不会丢失,它们的代码是相同的,但定时器只能与第一个正常工作)。想知道这是计时器的已知问题还是我做错了什么。

我的计时器是:

Loop_Timer = SetTimer(1,50,0);

...
void CSerialPortDlg::OnTimer(UINT nIDEvent)
{
Write_1(); //works as expected, continually writes from this function without user input
Write_2(); // these only work when they are changed, and stop sending afterwards..
Write_3();
Write_4();
Write_5();
Write_6();
CDialog::OnTimer(nIDEvent);
}

最佳答案

我从未与 MFC 进行过串行通信,但我不认为 SetTimer 是要走的路。那些计时器非常不可靠。当您将其设置为 50 毫秒时,您真正说的是“不早于 50 毫秒”,但它可以是 50、55、500 或其他任何值,具体取决于计算机在做什么(以及系统的计时器分辨率)。每次经过指定的时间后,您的应用都会收到 WM_TIMER 消息并且消息队列中没有其他消息 .因此,如果用户正在移动鼠标,则消息将“迟到”。

除此之外,我不知道那些 Write_X 函数需要多长时间,但你不应该在计时器处理程序中做冗长的事情,否则你会错过滴答声(这可能是正在发生的事情)。

也就是说,如果您确实需要连续发送 slider 状态(或您需要发送的任何数据),您应该找到一种连续发送的方法,而不是基于计时器。我的意思是,找到一种发送数据的方法,完成后通知您的应用程序或发送者线程,然后重新开始发送。但我不太确定应该怎么做。

关于visual-c++ - OnTimer 只重复第一个函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7281762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com