这个问题不是直接创建进程退出后就显示出来,而是在创建了好几次后然后报错
void UploadSlot::onClick() {
/*
wchar_t* nowComm = (wchar_t*)malloc(sizeof(wchar_t)*(12 + wcslen(selfNode->FilePath)+2));
wcscpy(nowComm, L"python pySrc/getData.py");
wcscat(nowComm, selfNode->FilePath);
//进行上传
selfNode->uploadStat = 1;
selfNode->orderStat = 1;
*/
selfBut->setEnabled(FALSE);
/*
((QLabel*)(tableWeightValueP[selfIndex][UPLOAD_STAT_INDEX]))->\
setText(*selfUploadTrue);
((QLabel*)(tableWeightValueP[selfIndex][ORDER_STAT_INDEX]))->\
setText(*selfOrderTrue);
*/
selfUpLoadStat->setText(*selfOrderTrue);
selfOrderStat->setText(*selfUploadTrue);
QString fileNameQ = selfFoundWeight->text();
wchar_t fileNameW[200];
memset(fileNameW, 0x00, sizeof(wchar_t) * 200);
fileNameQ.toWCharArray(fileNameW);
//进行上传
wchar_t* nowComm = (wchar_t*)malloc(sizeof(wchar_t)*(12 + wcslen(selfPath) + wcslen(fileNameW) + 8));
wcscpy(nowComm, L"python pySrc/getData.py ");
wcscat(nowComm, selfPath);
wcscat(nowComm, L"\\");
wcscat(nowComm, fileNameW);
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcess(NULL, nowComm, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
//QProcess* a = new QProcess();
//a->start(QString::fromWCharArray(nowComm));
//system(nowComm);
};
当你使用多线程时,要注意线程安全
多个线程不要同时访问同一个资源,比如文件、链表等,要加线程锁。
所有需要访问界面中控件的函数都放在了主线程中,处理数据的线程中也对全局变量用QMutex进行了加锁,按说不会出现访问冲突吧
我尝试注释掉CreateProcess函数,注释之后,点击没有问题,所以可以确定问题出在了CreateProcess中
已经解决,CreateProcess 中创建进程字符串出错。原因是对应的字符串的内存未全置为0x00,导致没有结束\0符,甚至有乱码字符出现。