C++ 如何使用vc+在特定时间段后使用线程中的计时器创建文本文件+;?
我已经尝试过在每分钟后生成相同的文本文件,但它在控制台应用程序上不起作用。我正在使用vs2017C++ 如何使用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
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){}第一个变量非常糟糕,因为它会无限地创建新线程。这两个例子都没有所需的事件循环。它需要在线程本身内部。