小编Ani*_*amy的帖子

c ++,mfc - 消息框显示,主窗口有一个取消按钮.在消息框处于活动状态时阻止取消

我有一个奇怪的问题.请考虑以下情形:

  • 主窗口在单击某个按钮时创建子对话框.
  • 子对话框在工作线程中执行一些任务.
  • 在该任务期间发生错误,导致显示消息框,说出"Yikes!Something failed wrong"的内容.
  • 单击子对话框的"取消"按钮,导致关闭子对话框.
  • 消息框仍然有效!单击消息框中的任何内容=崩溃.

关于事情如何发生的伪代码:(请在这里忽略语法正确性)

MainWindowClass mainObj;

void MainWindowClass::OnSomeButtonClick()
{
    SomeDialogClass someDialogObj;
    someDialogObj.DoModal();
}

int MainWindowClass::doTask()
{
    // Do work
    if(ERROR)
    {
        MessageBox("Yikes! Something went wrong.", "Error", MB_OK);
        return ERROR;
    }
} 

///////////////////////////////////////////////////////////////////
// Meanwhile, in another file,

extern MainWindowClass mainObj;

void SomeDialogClass::OnCancel()
{
    // Do all cleanup and close dialog
}

int SomeDialogClass::workerThreadFunc()
{
    return mainObj.doTask();
}

int SomeDialogClass::DoModal()
{
    AfxBeginThread(workerThreadFunc);
    // Do all other work and then wait for the worker thread
}
Run Code Online (Sandbox Code Playgroud)

我的问题是双重的: …

c++ windows mfc messagebox

1
推荐指数
1
解决办法
1036
查看次数

检查硬盘上的坏扇区

最近几次停电后,我的计算机已经搞得很乱(BSODs时不时,整个操作系统表现得非常奇怪).

现在我有一个程序在我的计算机弄乱之前运行得非常好.这个程序基本上只是创建一个文件使用CreateFile和写入它WriteFile.这个程序还有其他东西基于这个文件做他们的事情.我注意到整个程序也表现得很奇怪.

我的调试结果:

  • 我注意到之后CreateFile,文件被创建应该在哪里(使用资源管理器和命令行检查).
  • WriteFile 没有写入文件(再次使用资源管理器和命令行检查).
  • 之后WriteFile,每当我在资源管理器中双击该文件或对该文件执行任何操作时,所有操作都表现为该文件不存在.
  • 所有API都返回了各自的成功代码.绝对没有错误.
  • 在我停止我的程序并退出IDE之后,我去了资源管理器并试图删除包含上面创建的文件的文件夹,它向我展示了这个:

    我尝试删除文件夹时出错

  • 该文件已被删除.

注意:上述情况并非总是如此.

由于上面的调试,我得出结论,由于我的整个操作系统表现得很奇怪,我的程序也很奇怪.我的计划没有错(因为在那些严重的停电之前一切都很完美).

无论如何,微软有这个说错误.基本上我的硬盘有很多坏道.

我的问题:有没有办法以编程方式检查C中的硬盘是否正常?该检测不需要100%正确.但是,我确实希望这个检查非常快(因为我做了大量的写操作等).

我想要这个检查,因为截至目前,我的程序的其余部分认为该文件已准备就绪(因为没有返回错误)并且随后出现各种奇怪的行为.作为一个可能不知道他/她的硬盘被驱动的用户,我希望我的程序建议运行磁盘检查.

c winapi corruption hard-drive

1
推荐指数
1
解决办法
1692
查看次数

将结构传递给线程

我想知道如何将结构传递给线程.我编写了一个示例应用程序,我在其中声明了一个结构main并尝试将其传递给线程.

这是我的代码:

DWORD WINAPI Name1(LPVOID lparam)
{
    data x;
    x.name[15]="Sarah";
    x.DOB="19/10/2007";
    fputs(stdout,name,15);
    fputs(stdout,DOB,15);

    return 0;
}

int main()
{
    struct data
    {
        char name[15];
        char DOB[15];
    };

    HANDLE thread2;
    DWORD threadID2;
    thread2= CreateThread(NULL,0,Name1,(LPVOID *)data,0,&threadID2);

    if(thread2==NULL)
    {
        cout<<"Couldn't Create Thread:("<<endl;
        exit(0);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我没有把结构传递给一个线程:(如果有人帮助我,我真的很感激.

我试图改变结构的数据类型来传递它,但是,我想我不知道该怎么做.

c c++ winapi

1
推荐指数
1
解决办法
5194
查看次数

相同的代码在C中提供不同的输出

我很难过.我正在粘贴下面的程序.

void printGrid(int n,char grid[n][n]){
    for(int i = 0; i<n ; i ++) {
        printf("\n%s",grid[i]);
    }
}

int main() {    
    char grid[6][6]= {"-----","-----","-----","-----","-----"};

    printGrid(5, grid);

    for(int i = 0; i<5 ; i ++) {
        printf("\n%s",grid[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

-----
-
--
---
-----
-----
-----
-----
-----
Run Code Online (Sandbox Code Playgroud)

为什么同一个for循环在函数外部和内部产生不同的输出printGrid

c memory arrays printf exc-bad-access

0
推荐指数
1
解决办法
214
查看次数

指向结构打印的指针数组

我有一个指向结构的指针数组:

item** items = NULL;
Run Code Online (Sandbox Code Playgroud)

这些是我为分配和打印数组而编写的函数:

void allocateItems(item** items, int numItems) {
    items =malloc(numItems*sizeof(item*));
    for (int i = 0; i < numItems; i++) {
        items[i]=malloc(sizeof(item*));
        items[i]->data = i + 1;
        items[i]->data2 = (i + 1) % 2;
    }
}

void printItems(item** items, int numItems) {
    for (int i = 0; i < numItems; i++) {
        printf("%d : %d\n", items[i]->data, items[i]->data2);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试打印那个结构数组时,我得到了一个分段错误.谁能告诉我错误在哪里?

c struct pointers segmentation-fault

0
推荐指数
1
解决办法
134
查看次数