首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要逻辑帮助

需要逻辑帮助
EN

Stack Overflow用户
提问于 2013-02-21 17:28:08
回答 4查看 112关注 0票数 0

这段代码只工作一次,也就是说,当用户在线和离线时。我想以这样一种方式循环,使它始终为我提供信息。如:在线11:00,离线11:30,在线11:45,离线12:00。

我怎么解决这个问题呢?

代码语言:javascript
复制
bool showed =false;
bool nshowd =false;                         
for (; ; )
{
    //chech_online() <- this methods gives true if the person is online on FB

    bool check_online =check_online();                             

    if(check_online ==true && !showed)
    {
        Console.WriteLine("Online !!" +DateTime.Now);
        showed = true;
    } 
    else if(check_online ==false && !nshowd)
    {
        Console.WriteLine("OFFline !!" + DateTime.Now);
        nshowd = true;
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-21 17:32:48

你可以做一个循环,并在每次迭代中休眠10分钟,等等?

代码语言:javascript
复制
bool toggle = false;
bool exitloop = false;
int checkinterval = 600; // time in seconds between check

while(!exitloop)
{
    bool is_online = check_online();                             

    if (is_online) 
    {
        if (!toggle) 
        {
            Console.WriteLine("Online!" + DateTime.Now.ToString();
            toggle = true;
        }
    }
    else
    {
        if (toggle) 
        {
            Console.WriteLine("Offline!" + DateTime.Now.ToString());
            toggle = false;
        }
    }

    Thread.Sleep(checkinterval * 1000);

    // it would be a good idea to allow a mechanism
    // to exit from the infinite loop.
    if (check_if_we_should_exit_loop()) 
    {
        exitloop = true;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-02-21 17:32:04

为什么showednshowed是不同的变量?您不需要一个单独is_online变量,然后测试与check_online不同的变量吗

代码语言:javascript
复制
bool is_online = false;
for(;;)
{
    bool check_online = check_online();
    if (check_online != is_online)
    {
        // Online state has changed. Store the new state and log out
        is_online = check_online;
        if (is_online)
        {
            Console.WriteLine("Online !!" +DateTime.Now);
        }
        else
        {
            Console.WriteLine("Offline !!" +DateTime.Now);
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-02-21 17:40:26

因为showednshowd是互斥的,所以没有必要同时维护它们-这就是布尔变量的全部意义:

代码语言:javascript
复制
userShown = false
while true:
    userOnline = check_online()
    if userOnline && !userShown:
        output "User is online"
        userShown = true
    else:
        if !userOnline && userShown:
            output "User is offline"
            userShown = false
    sleep a bit

或者,您可以只保留最后一个状态,并仅在其更改时显示:

代码语言:javascript
复制
isOnline = check_online()
wasOnline = !isOnline
while true:
    if isOnline != wasOnline:
        output "User is ", (isOnline) ? "online" : "offline"
        wasOnline = isOnline
    sleep a bit
    isOnline = check_online()

这个特定的方法保证了初始消息的输出不受用户状态的影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14998651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档