我正在寻找有关处理器如何与硬盘驱动器、网卡一起工作、如何将数据加载到内存并发送的信息。
请推荐一本书或简要说明。
Alleksh _'s questions
我们有 8 个功能:
void Function1() {}
...
void Function8() {}
我们有一个 char 变量,其中只有 8 位。
例如,如果它包含 10001011,那么我们必须执行 Function1、Function5、Function7、Function8。
那么,在资源和占用内存方面,什么会更有效呢?
1) 8 个如果:
void CallFunctions(char val) {
if(val & 1) {
Function1();
}
...
if(val & 0x80) {
Function8();
}
}
2)用函数指针初始化一个数组,大小为256个元素:
std::function<void()> *ptrs;
并在 val 处调用每个函数:
void CallFunctions(char val) {
ptrs[val]();
}
例如,在 ptrs[1] 会有一个只调用 Function1(); 的函数。
在 ptrs[3] 处,已经有一个函数依次调用 Function1() 和 Function2()。
3) 你的选择。
如果是后者,如何以最少的内存分配来做到这一点?
每个参数都是绝对正确的,但是由于某种原因在 std::invoke 中抛出了异常。
代码:
调用函数:
void AutoSendFunc(
bool& CloseThreads,
char* Request,
int delay,
void(*ProcessFunc)(request),
void(*sendRequest)(char*&, char*))
{
while (!CloseThreads)
{
char* ptr;
sendRequest(ptr, Request);
ProcessFunc(request(std::string(ptr)));
std::this_thread::sleep_for(std::chrono::milliseconds(delay));
delete ptr;
}
}
尝试调用线程:
void sendRequest(char*& recvdest, char*send)
{
}
...
std::vector<std::pair<
std::pair
<std::string,
int>,
void(*)(request)>> Requests;
...
#define Request Requests[i].first.first
char* request = new char[Request.size()+1];
memcpy(request, Request.c_str(), Request.size());
request[Request.size()] = 0;
#undef Request
std::thread thread
(
AutoSendFunc,
CloseThreads,
request,
Requests[i].first.second,
Requests[i].second,
&sendRequest
);
结论:
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(238): error C2672: "std::invoke": не найдена соответствующая перегруженная функция
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(246): note: выполняется компиляция ссылки на экземпляр шаблон функции "void std::_LaunchPad<_Target>::_Execute<0,1,2,3,4,5>(std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)> &,std::integer_sequence<_Ty,0,1,2,3,4,5>)"
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>,std::default_delete<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>>>,
1> _Ty=size_t
1> ]
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(245): note: выполняется компиляция ссылки на экземпляр шаблон функции "void std::_LaunchPad<_Target>::_Execute<0,1,2,3,4,5>(std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)> &,std::integer_sequence<_Ty,0,1,2,3,4,5>)"
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>,std::default_delete<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>>>,
1> _Ty=size_t
1> ]
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(242): note: при компиляции функции-члена "<Нет данных>" класса класс <Нет данных>
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(230): note: выполняется компиляция ссылки на экземпляр шаблон функции "void std::_LaunchPad<_Target>::_Run(std::_LaunchPad<_Target> *) noexcept"
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>,std::default_delete<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>>>
1> ]
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(257): note: выполняется компиляция ссылки на экземпляр шаблон класс "std::_LaunchPad<_Target>"
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>,std::default_delete<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>>>
1> ]
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thread(46): note: выполняется компиляция ссылки на экземпляр шаблон функции "void std::_Launch<std::unique_ptr<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>,std::default_delete<_Ty>>>(_Thrd_t *,_Target &&)"
1> with
1> [
1> _Ty=std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>,
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>,std::default_delete<std::tuple<void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)>>>
1> ]
1>c:\users\alleksh\source\repos\netlib\netlib\netlib.h(152): note: выполняется компиляция ссылки на экземпляр шаблон функции "std::thread::thread<void(__cdecl &)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *)),bool&,char*&,_Ty2&,void(__cdecl *&)(request),void(__cdecl *)(char *&,char *),void>(_Fn,bool &,char *&,_Ty2 &,void (__cdecl *&)(request),void (__cdecl *&&)(char *&,char *))"
1> with
1> [
1> _Ty2=int,
1> _Fn=void (__cdecl &)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *))
1> ]
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(237): error C2893: Сбой при специализации функции-шаблона "unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)"
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(237): note: Со следующими аргументами шаблона:
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(237): note: "_Callable=void (__cdecl *)(bool &,char *,int,void (__cdecl *)(request),void (__cdecl *)(char *&,char *))"
1>d:\mvs\ide\vc\tools\msvc\14.14.26428\include\thr\xthread(237): note: "_Types={bool, char *, int, void (__cdecl *)(request), void (__cdecl *)(char *&,char *)}"
有这个代码:
bool Auth(int num)
{
Authentication AuthWindow;
AuthWindow.show();
if(AuthWindow.exec() == QDialog::Accepted)
{
string login=AuthWindow.login,password=AuthWindow.password;
if(!TryLogin(login,password))
exit(EXIT_SUCCESS);
AuthWindow.close();
user(login, password);
}else exit(EXIT_SUCCESS);
return true;
}
当然是行不通的。
如何使功能等到授权窗口完成其工作?
如何从文件中读取和输出每一行?
有这个代码:
ifstream log(Str+"\\log.txt");
do
{
string asd;
getline(log,asd);
cout << asd << endl;
}while(???);
log.close();
但它当然行不通。
创建了2个数组:
- 一组 Card 类对象 - 带有数字的表格。
- 该数组的主数,在本例中为 2 的幂。
应该生成4个值。适用于对象,但不适用于数字。
编码:
int* AllNumList;
int Cmin=0, Cmax=0;
void Game()
{
bool end = 0;
int numOfIterations = 0;
int maxNum = 1;
while (maxNum <= Cmax)
{
numOfIterations++;
maxNum = pow(2, numOfIterations);
}
numOfIterations--;
maxNum = pow(2, numOfIterations);
Card* card = new Card [numOfIterations +1];
AllNumList = new int [numOfIterations+1];
for (int i = 0; i <= numOfIterations;i++)
{
AllNumList[i] = pow(2, i);
card[i].AddGenNumber(pow(2, i));
}
}
第一次循环迭代:
最后一次迭代:
我有一个创建日志的函数。
无论我如何旋转 - 该文件都是在启动程序的文件夹中创建的。
我决定走另一条路,当我运行 .exe 时,如何使程序在另一个文件夹中工作?
MVS 将我的项目编译到 .exe 所在的 Debug 文件夹中,但日志出现在源文件夹中。
这是记录功能以防万一:
void CreateLogFile()
{
ifstream logg;
logg.open("latest.txt");//Открываем старый файл лога - latest.txt
if (bla.is_open())//Если файл существует
{
string date;
logg >> date;//В первой строке записана дата.
date = date + ".txt";
logg.close();
const char * newfilename = date.c_str();
rename("latest.txt", newfilename);//Переименовываем файл в [date].txt
}
logg.close();
string asdlog = "[" + getTime(1) + "." + getTime(0) + "_" + getTime(2) + "-" + getTime(3) + "-" + getTime(4) + "]";
//getTime обрабатывает и возвращает время
asdlog += '\r';
asdlog += '\n';//По другому не работает перенос строки.
ofstream lg;
lg.open("latest.txt");
lg << asdlog;//Записываем на первую строку дату.
lg.close();
}
它看起来像这样:http
://snap.ashampoo.com/JsChUMDW
日志看起来像这样:http ://snap.ashampoo.com/VvT8IsWE
我创建了 2 个不同类的对象,以及一个指向某个对象的指针。 http://snap.ashampoo.com/El2QRRNh 如何创建指向可以根据所需形状更改的对象的指针? http://snap.ashampoo.com/g28QYe0T
例如,有一个文件lan.txt
.
它说:
Rus.George
{
answer:
1.Здравствуй.
2.Бла-бла.
Dialog:
1.Здравствуй, путешественник.
2.Бла-бла.
}
Eng.George
{
answer:
1.Hello.
2.Bla-bla.
Dialog:
1.Hello, traveler.
2.Bla-bla.
}
一个问题的本质:
如何找到必要的行(例如Rus.George
,然后拉出必要的文本)?
由于不可能从一个程序中调用 2 个控制台,因此我在 game.exe 中编写了将日志保存到文件中,并且 log.exe 应该读取日志中的文本并将其显示在屏幕上。在 game.exe 中一切正常。问题在于阅读。那些。log.exe 不会在屏幕上显示任何内容。 正如您在屏幕截图中看到的那样,发生了变化(我按了 D)。 “RIGHT CALLED”已写入文件。但是控制台中什么都没有。日志.cpp:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <Windows.h>
#include <ostream>
#include <fstream>
using namespace std;
int main()
{
bool exit_=0;
string x, previousX;
ifstream bob("log.txt");
while (!exit_) {
bob >> x;
if (x == "EXIT CALLED") { exit_ = 1; }
if (x == previousX) { continue; }
cout << x;
previousX = x;
Sleep(50);
}
return 0;
}
你好。它给出了一个难以理解的错误,如何解决它?截图: 这里是源代码:
string translator(string x, int language) {
string Return;
map <char, char> mapEng{{ 'q', 'й' },{ 'w', 'ц' },{ 'e', 'у' },{ 'r', 'к' },{ 't', 'е' },{ 'y', 'н' },{ 'u', 'г' },{ 'i', 'ш' },{ 'o', 'щ' },{ 'p', 'з' },{ 't', 'е' },{ '[', 'х' },{ ']', 'ъ' },
{ 'a', 'ф' },{ 's', 'ы' },{ 'd', 'в' },{ 'f', 'а' },{ 'g', 'п' },{ 'h', 'р' },{ 'j', 'о' },{ 'k', 'л' },{ 'l', 'д' },{ ';', 'ж' },{ '\'', 'э' },{ '\\', '\\' },
{ 'z', 'я' },{ 'x', 'ч' },{ 'c', 'с' },{ 'v', 'м' },{ 'b', 'и' },{ 'n', 'т' },{ 'm', 'ь' },{ ',', 'б' },{ '.', 'ю' },{ '/', '.' } };
switch (language) {
case 1:
for (int i = 0; i < x.length(); i++) {
char a = mapEng.find(x[i]);
Return += a;
}
case 2: break;
}
}
你好。我不明白出了什么问题。包括所有库(SDL2.lib、SDL2main.lib)。一切都已初始化。为什么它不起作用?编译器输出:
> 1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: ссылка на
> неразрешенный внешний символ _SDL_main в функции _main_utf8
> 1>C:\Users\alleksh_\Desktop\cppprojects &
> backups\games\SDLGame\Debug\SDLGame.exe : fatal error LNK1120:
> неразрешенных внешних элементов: 1
这是源代码:
#include <iostream>
#include <SDL.h>
int main()
{
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {return 1;}
SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
if (win == nullptr) {return 1;}
return 0;
}
这是源代码:
#include "stdafx.h"
#include <string>
#include <Windows.h>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::string P, R;
cin >> P >> R;
vector<char> PMassive(P.begin(), P.end());
vector<char> RMassive(R.begin(), R.end());
int counter = 0;
int counter2 = R.length();
metka:
int counter3 = P.length();
if (counter2 == 0) goto end;
if (PMassive[counter3] == RMassive[counter2]) {
counter2--;
counter3--;
}
else if (counter2 != 0) { counter++; goto metka; }
end:
std::cout << counter;
Sleep(5000);
return 0;
}
引发向量下标超出范围错误:http ://snap.ashampoo.com/biLxWrF4 问题是(PMassive[counter3] == RMassive[counter2])。我能做些什么来修复它?