Monthly Archives: June 2022

Windows程序设计之控制台程序的定时器使用方法

一、函数原型

VOID CALLBACK TimerProc(
  HWND hwnd,         // handle to window
  UINT uMsg,         // WM_TIMER message
  UINT_PTR idEvent,  // timer identifier
  DWORD dwTime       // current system time
);

UINT_PTR SetTimer(
  HWND hWnd,              // handle to window
  UINT_PTR nIDEvent,      // timer identifier
  UINT uElapse,           // time-out value
  TIMERPROC lpTimerFunc   // timer procedure
);

Continue reading

Windows程序设计之创建、打开、读写文件方法介绍

一、创建或打开文件

HANDLE CreateFile(
  LPCTSTR lpFileName,                         // file name
  DWORD dwDesiredAccess,                      // access mode
  DWORD dwShareMode,                          // share mode
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD
  DWORD dwCreationDisposition,                // how to create
  DWORD dwFlagsAndAttributes,                 // file attributes
  HANDLE hTemplateFile                        // handle to template file
);

Continue reading

C++程序设计之QEventLoop实现进入和退出事件循环

QEventLoop类为我们提供了一种进入和退出事件循环的方法。在任何时候,你都可以创建一个QEventLoop实例,并通过调用exec()来启动一个事件循环。在循环期间,主动调用exit()可以使exec()强制返回。

void Worker::run()
{
    QEventLoop loop;
    QTimer *timer = new QTimer;
    connect(timer, &QTimer::timeout, this, [&]()
    {
        static int count = 0;
        qDebug() << QDateTime::currentDateTime().toString();
        if(++count == 10) loop.quit();
    },
    Qt::DirectConnection);
    timer->start(1000);
    loop.exec();
}

C++程序设计之Boost序列化与反序列化自定义数据结构

Boost Serialization的主要概念是归档。归档的文件是相当于序列化的C++对象的一个字节流。对象可以通过序列化添加到归档文件,反过来也可从归档文件中加载。

一、自定义数据结构

class DateTime
{
public:
    DateTime(int y=0, int m=0, int d=0)
    {year = y; month = m; day = d;}
    
    void Display(void)
    {cout << year << "-" << month << "-" << day << endl;}
    
    template<class Archive>
    friend void serialize(Archive &ar, DateTime &dt, const unsigned int version);
    
private:
    int year;
    int month;
    int day;
};

Continue reading