C++ 如何使用vc+在特定时间段后使用线程中的计时器创建文本文件+;?

C++ 如何使用vc+在特定时间段后使用线程中的计时器创建文本文件+;?,c++,multithreading,visual-c++,timer,C++,Multithreading,Visual C++,Timer,我已经尝试过在每分钟后生成相同的文本文件,但它在控制台应用程序上不起作用。我正在使用vs2017 void CALLBACK f(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime) { ofstream myfile; myfile.open("C:\\log.txt", ios::app); myfile << " : test" << "\n"; myfi

我已经尝试过在每分钟后生成相同的文本文件,但它在控制台应用程序上不起作用。我正在使用vs2017

 void CALLBACK f(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime)
 {
ofstream myfile;
myfile.open("C:\\log.txt", ios::app);
myfile <<  " : test" << "\n";
myfile.close();
KillTimer(hwnd, timerId);
}
unsigned int __stdcall mythread(void* data)
{
while (startii == 0)
{
    SetTimer(0,             // handle to main window 
        0,            // timer identifier 
        10000,                 // 10-second interval 
        (TIMERPROC)&f);     // no timer callback 

    return 0;
  }
 int main()
{
myhandle = (HANDLE)_beginthreadex(0, 0, &mythread, 0, 0, 0);
}enter code here
void回调f(HWND-HWND、UINT-uMsg、UINT-timerId、DWORD-dwTime)
{
流文件;
打开(“C:\\log.txt”,ios::app);

myfile使用
std::thread
std::this\u thread::sleep\u(std::chrono::毫秒(7000))
左右

线程本身将是这样的

UINT CALLBACK hammersmith(VOID *c)
{   
    while (1)
    {   
        std::unique_lock<std::mutex> lb(com_m);
        sp_tray = std::shared_ptr<int>(new int(7));
        com_r = sp_tray;
        lb.unlock();    
        sp_tray.reset();
    }

    return 0;
    
}
UINT回调hammersmith(VOID*c)
{   
而(1)
{   
标准:唯一锁lb(com);
sp_托盘=标准::共享_ptr(新整数(7));
com_r=sp_托盘;
lb.解锁();
sp_托盘。重置();
}
返回0;
}
或者对
\u beginthreadex
使用类似的线程函数。您可以使用winapi的
Sleep()
。并且
回调
包含stdcall内容,因此请改用它。

计时器来自16位windows纪元

创建线程后,显示的
main
函数将立即返回。这将结束整个进程以及其中运行的所有线程。还请记住计时器需要一个窗口事件循环(即使对于无窗口的应用程序也是如此)要处理。如果没有正常的窗口偶数循环,您将不会收到任何计时器事件。这是behavior.hi@someprogrammerdude。我还使用
code
int main(){而(1){myhandle=(HANDLE)beginthreadex(0,0,&mythread,0,0);}你能分享一下如何做到这一点的例子吗?并且还尝试了int main(){myhandle=(HANDLE)_beginthreadex(0,0,&mythread,0,0,0);而(1){}第一个变量非常糟糕,因为它会无限地创建新线程。这两个例子都没有所需的事件循环。它需要在线程本身内部。