分类 未分类 下的文章

参考https://blog.csdn.net/zh458042230/article/details/8630469

这个是中断进程和主函数进程(或其他中断)都调用了同一个函数A的缘故. 中断进程会打断主函数进程而运行, 这时如果打断的地方是主函数进程运行函数A还没有结束的地方, 那么中断再次运行到函数A就会发生函数重入.
如果一定要这么做, 需要加上reentrant这个关键词.
当然中断最好是快进快出. 避免重入的方式, 一般应该是中断中设置需要做函数A任务的标志, 然后在主函数里去完成.

人类很容易把手段当成目标,从而忘记了本来的目标. 毛爷爷说这个就叫"教条化".
我发现很多宗教的问题, 甚至包括宗教本身就是这么产生的."教条化"这个词确实很形象.
孔夫子提出"礼",是针对东周末年朝纲崩坏, 诸侯甚至乱用天子之礼的问题, 目的是为了回复秩序. 而后来孔夫子的话就被当成圣旨不可违抗, 然后就变成了儒教.
同样老子为解释天地万物写了道德经, 里面少不了用一些象征比喻, 因为"道可道非常道", 本来就不好解释清楚嘛. 然后后人看不懂的比喻就强行解释, 或者强制解释为表面意思, 或者胡乱引申为其他意思. 有的是蠢, 有的是坏. 这就有了道教.
同理见其他宗教. 道教的三峰派, 印度教的性力派, 藏传佛教的密宗灌顶, 多多少少都把性从手段变成了目标.
而要是考量基督教,伊斯兰教和佛教的起源, 更都是将先贤的话教条化产生的宗教.

原始的目标只在一定的环境下存在. 教条化就是不顾原始目标,甚至不知道原始目标, 却一定要将手段实现.

甚至现在的企业管理也存在这样的问题. 比如马云的996是福报论. 996作为手段对于马云的目标来说确实是福报, 然而对于码农来说996变成了目标就不见得是福报了, 除非他和马云目标一致.

ACER进入普通BIOS是F2,然而很多选项看不到.
参考这篇文章: https://blog.csdn.net/zhuzhuxiazst/article/details/116143900

1 当前很多的PC厂商发布的计算机产品,在开机进入BIOS时,一般默认都隐藏了Advanced菜单,防止用户误操作导致笔记本的异常,用户无法直接调整advanced设置,比如更改SATA mode (IDE/AHCI),CPU,GPU,FAN等的设置.

2 一些厂商发布的BIOS的advanced 菜单可以通过进入bios后,使用组合键后重启再次进入bios或者直接使用组合键在bios中来开启.

A  LZ自己实测的一款笔记本通过组合键进入了bios advanced菜单.

笔记本: Acer TravelMate P246 系列。 BIOS: InsydeH20 V5.0.

开启advanced菜单的方式:

  1) 按电源键后 按F2 进入bios页面.

  2)  按住 Fn键,然后依次按 Tab键,asdfgho 字母键,松开Fn键,然后F10保存BIOS设置并重启(注意本处一定不能在F10重启时按电源键关闭电源,然后再开机).

  3) 按电源键 后按F2再次进入bios页面,便能看到advanced菜单(进入后LZ还是未能看到有更改sata controller模式的菜单,比较可惜)。(再次重启bios后,高级菜单会再次隐藏,需要再次循环以上操作来调出高级菜单.)

遥遥归途逢国庆,
工业限电停灯笼。
暮光长照红旗静,
思心念家急车行。
寅睡难眠母窸窣,
辰闹儿女父叹息。
浪里归湾湾不静,
树欲停而风不停。

七十二年又华诞,
甲子地支各一轮。
茹苦含辛终渐老,
忠孝未尽愧吾心。
碌碌人生是所愿,
空空苟活非所殷。
平平淡淡侬常在,
来年新月复照人。

eletron 12版本以后默认开启了上下文隔离

webPreferences: {
      contextIsolation: true,
}

上下文隔离后, 内存变成了不一样的区域, 通过桥接函数contextBridge.exposeInMainWorld从preload转移过去的都是复制的内容, 桥接过去的obj也是复制的, 在render中修改并不会影响preload. 甚至ipcRender也不能直接桥接过去, .on会丢失.
可是renderer中最重要的就是ipc消息交互了. ipcRenderer.on用不了要如何监听ipcMain发过来的消息?
Eletron官方文档中居然都没有写如何桥接.on,只写了.send.invoke
参考这个回答吧: https://stackoverflow.com/questions/59993468/electron-contextbridge
两个人给出了两种方式:都是preload.js
第一种:

const {
    contextBridge,
    ipcRenderer
} = require("electron");

// Expose protected methods that allow the renderer process to use
// the ipcRenderer without exposing the entire object
contextBridge.exposeInMainWorld(
    "api", {
        send: (channel, data) => {
            // whitelist channels
            let validChannels = ["toMain"];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel, data);
            }
        },
        receive: (channel, func) => {
            let validChannels = ["fromMain"];
            if (validChannels.includes(channel)) {
                // Deliberately strip event as it includes `sender` 
                ipcRenderer.on(channel, (event, ...args) => func(...args));
            }
        }
    }
);

第二种:

const { ipcRenderer, contextBridge } = require('electron')

const validChannels = ["toMain", "myRenderChannel"];

contextBridge.exposeInMainWorld(
  "api", {
    send: (channel, data) => {
        if (validChannels.includes(channel)) {
            ipcRenderer.send(channel, data);
        }
    },
    on: (channel, callback) => {
      if (validChannels.includes(channel)) {
        // Filtering the event param from ipcRenderer
        const newCallback = (_, data) => callback(data);
        ipcRenderer.on(channel, newCallback);
      }
    },
    once: (channel, callback) => { 
      if (validChannels.includes(channel)) {
        const newCallback = (_, data) => callback(data);
        ipcRenderer.once(channel, newCallback);
      }
    },
    removeListener: (channel, callback) => {
      if (validChannels.includes(channel)) {
        ipcRenderer.removeListener(channel, callback);
      }
    },
    removeAllListeners: (channel) => {
      if (validChannels.includes(channel)) {
        ipcRenderer.removeAllListeners(channel)
      }
    },
  }
);

选择global版本

<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.0-beta.7/vue.global.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.0-beta.7/vue.global.min.js"></script>

文档准备好后再运行脚本

var ready = function ( fn ) {

  // Sanity check
  if ( typeof fn !== 'function' ) return;

  // If document is already loaded, run method
  if ( document.readyState === 'complete'  ) {
      return fn();
  }

  // Otherwise, wait until document is loaded
  document.addEventListener( 'DOMContentLoaded', fn, false );

};

防止看到花括号

    <div id="app" class="app" v-cloak>{{counter}}</div>
[v-cloak]{
  display: none!important;
}

https://www.bilibili.com/read/cv6183523/

做法:

  1. 切换到TechDraw工具组
  2. 点击最左边的插入默认页, 会插入一个新的2D绘图页. 并且视图Tab页和组合浏览器->模型中会增加一个Page
  3. 点击回3D视图页面, 选择要插入2D图纸的零部件,并且将视图角度旋转到需要表现的角度;
  4. 点击插入视图,将插入2D视图到2D图纸.
  5. 刚插入的可能很丑.点击选中插入的视图, 修改左侧组合浏览器中的数据属性, 将Coarse View设置为True, 选择Rotation旋转调整角度, 选择数据属性, 将Line Width设置为0.1mm.
  6. 在2D视图上点击右键选择导出为SVG, 保存即可.